这让我发疯了,请帮忙:)。
我的模型有一个实体NewsItem
,与source
实体有NewsSource
的关系。 NewsSource
有一个属性BOOL subscribed
。
我使用NSFetchedResultsController
来显示与谓词NewsItem
匹配的所有source.subscribed == YES
个对象。
当我在另一个视图控制器和subscribed
上下文中编辑NewsSource
的{{1}}属性时,会出现此问题。当然,获取的结果控制器不会获取更改,因为实际上没有更新save
对象。这就是为什么当NewsItem
包含NSManagedObjectContextDidSaveNotification
对象时,我注册performFetch
来呼叫reloadData
和notification.userInfo[NSUpdatedObjectsKey]
。
希望一切都清楚,也可以随意评论这种方法;)
所谓奇怪的是,获取的结果控制器的NewsSource
不会返回与谓词匹配的正确performFetch
个对象。使用显式提取请求,我将其跟踪到以下内容:
NewsItem
虽然我使用谓词来过滤查询,但会返回带有- (void)managedObjectContextDidSave:(NSNotification *)notification
{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"NewsItem"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"source.subscribed == YES"];
NSArray *result = [self.managedObjectContext executeFetchRequest:fetchRequest error:NULL];
for (NewsItem *item in result) {
NSLog(@"source.subscribed = %d", item.source.subscribed); // logs "source.subscribed = 0" when I change the value, although the predicate filters for YES!
}
}
的项目!当我直接查询subscribed == NO
个对象时,它按预期工作:
NewsSource
您有什么想法吗?
我可能会补充说我正在使用带有RestKit的Core Data设置,因此有一个私有队列- (void)managedObjectContextDidSave:(NSNotification *)notification
{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"NewsSource"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"subscribed == YES"];
NSArray *result = [self.managedObjectContext executeFetchRequest:fetchRequest error:NULL];
for (NewsSource *source in result) {
NSLog(@"subscribed = %d", source.subscribed); // always (correctly) logs "subscribed = 1"
}
}
,它与数据库及其子上下文persistentStoreManagedObjectContext
有直接连接。我只使用mainQueueManagedObjectContext
和mainQueueManagedObjectContext
那个。在save
applicationWillResignActive
保存persistentStoreManagedObjectContext
。当我退出并重新启动应用程序时,获取的结果控制器会显示正确的结果。