排除某些对象的一对多关系上的 NSFetchRequest 无法按预期工作

Posted

技术标签:

【中文标题】排除某些对象的一对多关系上的 NSFetchRequest 无法按预期工作【英文标题】:NSFetchRequest on to-many-relationship excluding some objects does not work as expected 【发布时间】:2010-08-27 08:02:41 【问题描述】:

这些天我在 NSFetchRequest 上苦苦挣扎。 我的数据模型如下所示:

Post <->> Category

现在我需要一个获取请求来获取 category.name 属性不是“xxx”的所有帖子。 查看 NSFetchRequest 的文档应该是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE category.name == %@", categoryName]

但这会导致一个空列表(该请求由 NSFetchedResultsController 在 UITableView 中使用。

文档说:

无 不指定以下表达式中的任何元素。例如,NONE children.age

如果我将谓词反转为

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY category.name == %@", categoryName]

该列表包含我想要从该列表中排除的对象。

我在这里错过了什么?

提前致谢

【问题讨论】:

【参考方案1】:

你的谓词形式是正确的。

最简单的解释是您没有匹配“@”NONE category.name == %@”谓词的对象。这可以解释为什么逆向有效。

我建议你:

    用 NSLog 记录谓词,看看每次谓词的实际情况 获取所有Post 对象将返回的对象计数与“ANY”谓词返回的对象计数进行比较。如果它们相同,那么... ...记录category.name 值以查看其中是否有任何匹配“NONE”谓词。

我认为这应该可以让您找到问题所在。

【讨论】:

以上是关于排除某些对象的一对多关系上的 NSFetchRequest 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 上的一对多关系

一对多删除对象不删除多个实体上的对象

iphone核心数据:无法删除具有一对多关系的数据

Laravel - 一对多关系上的保存方法的对立面是啥?

一对多关系上的 NSFetchedResultsController

如何管理 Core Data 中的一对多关系?