В моем приложении данные хранятся в основных данных в фоновом режиме. Основной управляемый объект-контекст (в appdelegate) уведомляется о каждом сохранении фона с помощью метода уведомления. Я показываю данные в виде таблицы. Я использовал nsfetchedrequestcontroller для автоматического обновления tableview. Я использовал тот же управляемый объект контекста в appdelegate для fetchedresultscontroller. Я получаю данные так, как ожидалось, и табличное представление обновляется для каждого сохранения данных в фоновом режиме. Но иногда табличное представление становится пустым только с одной или двумя ячейками. Я много разбирался в этой проблеме и обнаружил, что данные о неисправностях обрабатываются. Поэтому я изменил управляемый объект-контекст для fetchedresultscontroller на новый управляемый объект-контекст, как сказано в приведенной ниже ссылке.Данные не перезагружаются автоматически в uitableview при использовании nsfetchedresultscontroller
NSFetchedResultsController delegate fired even when context not saved
После делать это я не получаю пустые ячейки, но TableView автоматически не обновляется. Как я могу автоматически обновлять таблицу?
-(NSFetchedResultsController*)mfetchedResultsController
{
if (_mfetchedResultsController != nil) {
return _mfetchedResultsController;
}
NSString *loginUser=[[NSUserDefaults standardUserDefaults] valueForKey:@"currentUser"];
AppDelegate *sharedDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//NSManagedObjectContext *context = [sharedDelegate managedObjectContext];
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
context.persistentStoreCoordinator = [sharedDelegate persistentStoreCoordinator];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ThreadInfo"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"threadDate" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
NSPredicate *threadPredicate = [NSPredicate predicateWithFormat:@"userEmail == %@",loginUser];
[fetchRequest setPredicate:threadPredicate];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:context sectionNameKeyPath:nil
cacheName:nil];
_mfetchedResultsController = theFetchedResultsController;
_mfetchedResultsController.delegate = self;
return _mfetchedResultsController;
}
Кроме того, я получаю это предупреждение в моей консоли, когда Tableview становится пустым с одним или двумя клетками LOG:
2015-06-19 09:58:43.259[17460:1401522] CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. *** -[_PFBatchFaultingArray objectAtIndex:]: index (0) beyond bounds (0) with userInfo (null)
Что такое «nsfetchedrequestcontroller»? – Mundi