我发现使用CoreData和NSFetchedResultController非常奇怪。
我在这个谓词返回的UITableView(使用NSFetchedResultController)元素中显示:
NSPredicate *activeFilterPredicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(properties, $x, ($x.type == %@) AND ($x.deleted == %@)).@count > 0)", @"sales/lead", [NSNumber numberWithBool:NO]];
当我手动重新加载元素或者我在同一个NSManagedObjectContext上修改它们时,它工作正常。 我的应用程序也从Web服务器更新自己 - 而不是在子线程上我正在修改它并通过父子关系进行保存。
NSFetchedResultsController委托中的所有方法都能正常工作 - 对于其他NSPredicates我在那里一切正常。
经过1天的分析并试图确定问题后,似乎问题出现在这一部分内:
($x.deleted == %@).
似乎当它被子上下文修改时,父上下文的NSPredicate无法正常工作,并且不会过滤掉它应该的条目。
当我将属性切换到NSString而不是NSNumber并且我在NSString中编码YES / NO时 - 它起作用了。
有没有人有这个问题,现在如何克服它?我想切换到最后使用BOOL属性。
我已经尝试过(删除==否) - 没有帮助
答案 0 :(得分:0)
使用关系谓词获取结果控制器是一个大问题。我也在自己的应用程序中看到了这一点。我从7月03日( rdar:// 14373992 )有一个针对此问题的错误报告,但它已打开。
作为一种解决方法,我们最终对数据进行了非规范化处理,并且基本上每次更改关系时都会更新主对象上的属性。从长远来看,这是一个更好的解决方案,因为在fetch结果控制器中访问该属性比迭代每个对象的关系更有效。