获取满足谓词的实体,甚至有些实体的父对象为空

Posted

技术标签:

【中文标题】获取满足谓词的实体,甚至有些实体的父对象为空【英文标题】:Get Entities that fulfill predicate even some have null object for parent 【发布时间】:2014-11-06 06:42:46 【问题描述】:

我正在尝试使用谓词获取 NSFetchReultController 的记录

NSNumber *project_id=[[_options objectForKey:@"project"] objectForKey:@"server_id"];

predicate=[NSPredicate predicateWithFormat:@"(owner.user_id = %@ OR  Any jarSharedToUsers.user_id = %@) AND status = %@ AND  parentProject.project_id = %@ ",user.user_id,user.user_id,[NSNumber numberWithInt:1],project_id];

错误:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体中找不到 keypath parentProject.project_id”

我认为这是由于某些实体的 parentProject 为空。但是然后我如何获得满足谓词的实体

【问题讨论】:

【参考方案1】:

如果您尝试访问不存在的 NSManagedObject 的属性,通常会引发此错误。您是否重新检查了您的数据模型?从项目到 parentProject 的关系是否设置正确? parentProject 是否有一个名为 project_id 的实体?

您是否在更改 DataModel 后更新了 NSManagedObject 类?

另外:您是否在更改 dataModel 后从设备上完全删除了应用程序(或重置模拟器,如果您使用的话)?对 dataModel 的更改仅适用于干净的构建或使用迁移模型。

【讨论】:

问题是一些 NSManagedObject 有一个关系,而一些没有那个关系。

以上是关于获取满足谓词的实体,甚至有些实体的父对象为空的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:返回另一个实体的对象的谓词

fetchedResultsController 获取带有谓词的实体的最佳实践

如何使用实体框架获取记录计数匹配谓词

使用 NSFetchedResultsController 的子实体到父实体的谓词

如何使用谓词过滤子实体集合?

NSFetchRequest 具有一对一关系属性 == YES 谓词错误地获取每个实体