当关系更新时,获取请求返回与谓词不匹配的对象

时间:2014-05-26 13:33:56

标签: ios objective-c core-data restkit nsfetchedresultscontroller

这让我发疯了,请帮忙:)。

我的模型有一个实体NewsItem,与source实体有NewsSource的关系。 NewsSource有一个属性BOOL subscribed

我使用NSFetchedResultsController来显示与谓词NewsItem匹配的所有source.subscribed == YES个对象。

当我在另一个视图控制器和subscribed上下文中编辑NewsSource的{​​{1}}属性时,会出现此问题。当然,获取的结果控制器不会获取更改,因为实际上没有更新save对象。这就是为什么当NewsItem包含NSManagedObjectContextDidSaveNotification对象时,我注册performFetch来呼叫reloadDatanotification.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有直接连接。我只使用mainQueueManagedObjectContextmainQueueManagedObjectContext那个。在save applicationWillResignActive保存persistentStoreManagedObjectContext。当我退出并重新启动应用程序时,获取的结果控制器会显示正确的结果。

0 个答案:

没有答案