我的 NSFetchedResultsController 没有更新新导入的对象。
在后台线程上,我创建了一个不是主上下文子级的 NSManagedObjectContext 并添加了一个观察者,以便我可以合并更改。
NSManagedObjectContext *localContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [localContext setPersistentStoreCoordinator:[[NSManagedObjectContext defaultContext] persistentStoreCoordinator]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSave:) name:NSManagedObjectContextDidSaveNotification object:nil]; … -(void) contextDidSave:(NSNotification*) notification { if(![notification.object isEqual:[NSManagedObjectContext MR_defaultContext]] && ![notification.object isEqual:[NSManagedObjectContext MR_rootSavingContext]]) { NSDictionary *userInfo = [notification userInfo]; NSLog(@"updated: %i, inserted: %i", [userInfo[@"updated"] count], [userInfo[@"inserted"] count]); dispatch_async(dispatch_get_main_queue(), ^ { [[NSManagedObjectContext MR_defaultContext] mergeChangesFromContextDidSaveNotification:notification]; }); } }
- 我创建并反对并将其“可见”属性设置为 NO。
- 保存上下文。
- 将对象“可见”属性更新为 YES。
保存上下文。
MyEntity *entity = [MyEntity insertInManagedObjectContext:localContext]; entity.dateCreated = [NSDate date]; if (![localContext save:&error]) { NSLog(@"%@", error); } [entity setVisibleValue:YES]; if (![localContext save:&error]) { NSLog(@"%@", error); }
有NSFetchedResultsController
一个 fetchedRequest 过滤“可见”属性。
contextDidSave: 正在接收更新。
有时对象确实会成功并被NSFetchedResultsController
. 这让我觉得我做的事情是正确的,我正在查看一个 CoreData 错误。另一方面,我不确定该mergeChangesFromContextDidSaveNotification
方法到底发生了什么。
我用来隔离问题的代码可以在https://github.com/onato/CoreDataImportTest找到