【发布时间】:2014-04-18 15:03:26
【问题描述】:
我在使用 CoreData 和 NSFetchedResultController 时发现了非常奇怪的问题。
我正在显示从该谓词返回的 UITableView(使用 NSFetchedResultController)元素:
NSPredicate *activeFilterPredicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(properties, $x, ($x.type == %@) AND ($x.deleted == %@)).@count > 0)", @"sales/lead", [NSNumber numberWithBool:NO]];
当我手动重新加载元素或在同一个 NSManagedObjectContext 上修改它们时,它工作正常。 我的应用程序还从网络服务器更新自身 - 而不是在子线程上我正在修改它并通过父子关系保存。
来自 NSFetchedResultsController 委托的所有方法都可以正常工作 - 对于其他 NSPredicates 我有一切正常。
经过 1 天的分析和尝试确定问题后,问题似乎在这部分:
($x.deleted == %@).
似乎当它被子上下文修改时,父上下文的 NSPredicate 不能正常工作并且没有过滤掉它应该过滤的条目。
当我将属性切换到 NSString 而不是 NSNumber 并将 YES/NO 编码到 NSString 时 - 它起作用了。
有没有人遇到过这个问题,现在该如何解决?我想在最后切换到使用 BOOL 属性。
我已经尝试过 (deleted == NO) - 没有帮助
【问题讨论】:
-
Core Data boolean key value change not reflected in fetch 的副本? - 您不应该将关系称为“已删除”。
标签: ios nspredicate nsfetchedresultscontroller