我的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];
});
}
}
保存上下文。
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,可以过滤“visible”属性。
contextDidSave正在接收更新:。
有时候,对象确实可以创建并由NSFetchedResultsController
插入。这让我觉得我正在做的事情,我正在看一个CoreData错误。另一方面,我不确定mergeChangesFromContextDidSaveNotification
方法究竟发生了什么。