Я пытаюсь использовать контекст UIManagedDocument для нескольких вкладок для извлечения и хранения данных из моей базы данных. Тем не менее, он может получать информацию только тогда, когда я нахожусь на первой вкладке. На второй и третьей вкладках нет данных, и я не могу вставлять данные в основные данные с ними. Я использую полученный контекст, чтобы настроить общий NSFetchController, но, как я сказал, это работает правильно только для первой вкладки. Что я делаю не так?iOS UI-управляемый документ на нескольких вкладках
- (NSManagedObjectContext *)managedObjectContext {
if (_document.managedObjectContext) {
return _document.managedObjectContext;
}
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject]; // Default location to store the document
NSString *documentName = @"ModelDocument";
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
self.document = [[UIManagedDocument alloc] initWithFileURL:url];
if ([fileManager fileExistsAtPath:[url path]]) { // If already exists, open the document
[self.document openWithCompletionHandler:^(BOOL success) {
if (success) {
[self announceContextReady];
} else {
NSLog(@"Problem with database!");
}
}];
} else {
[self.document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { // Document doesnt exist, create it
if (success) {
[self announceContextReady];
} else {
NSLog(@"Problem with saving!");
}
}];
}
return _document.managedObjectContext;
}
Fetch контроллер (не работает на второй или третьей вкладке):
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
switch (type) {
case NSFetchedResultsChangeInsert: {
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
case NSFetchedResultsChangeDelete: {
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
case NSFetchedResultsChangeUpdate: {
[self configureCell:(UITableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
}
case NSFetchedResultsChangeMove: {
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
}