Итак, я играл с этой точной ситуацией, и я не буду противоречить первому ответу - вы, вероятно, не должны этого делать, и если вам нужно, может быть, iCloud работает. Не используйте этот код. Я предоставляю его, чтобы помочь другим добраться до момента, когда они смогут обнаружить все проблемы, которые я не исправил, и двигаться дальше.
Тем не менее, вы можете сделать то, что искал исходный вопрос - заставить контроллер перезагрузиться с диска:
// Tear down bindings and context, create new context & rebind
[self.watcherAC unbind:@"managedObjectContext"];
[self saveAction:self]; // Optional, dependent on NSMergePolicy, etc
self.managedObjectContext = [[NSManagedObjectContext alloc] init];
self.managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
[self.managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
[self.watcherAC bind:@"managedObjectContext" toObject:self withKeyPath:@"managedObjectContext" options:nil];
// Force controller to refetch and rearrange
NSError* error;
[self.watcherAC fetchWithRequest:nil merge:NO error:&error]; // Immediate fetch
[self.watcherAC prepareContent];
[self.watcherAC rearrangeObjects];
Это обновляет содержимое tableView из хранилища на диске. (TableView привязан к контроллеру массива watcherAC)
Я обнаружил, что выборка: происходит не сразу - это выполняется в следующий раз через цикл выполнения приложения. Итак, чтобы выборка / перестановка выполнялись в правильном порядке, вам необходимо использовать fetchWithRequest:
Я не уверен, что нужен prepareContent:, хотя он, возможно, помог устранить ошибки в содержимом контроллера.
Мне не удалось заставить его восстановить выбор tableView, хотя это может быть потому, что я делаю это в вызове делегата tableview, поэтому выбор представления не синхронизируется с выбором контроллера, независимо от того, какие взломы я пробую. Может быть это сработает для кого-то, но я предлагаю попытаться выяснить, как не выделять новый MOC, если ваше представление имеет привязки к нему.
person
stevesliva
schedule
02.04.2014