NSPredicate 按仅存在于其中一个子类中的属性过滤掉结果

Posted

技术标签:

【中文标题】NSPredicate 按仅存在于其中一个子类中的属性过滤掉结果【英文标题】:NSPredicate to filter out results by property that exists only in one of the subclasses 【发布时间】:2016-01-26 06:13:18 【问题描述】:

是否可以编写一个谓词,通过仅存在于其中一个子类(在 CoreData 中)中的属性过滤掉对象。

例如:

class MainClass: NSManagedObject 
    vars...


class Subclass1: MainClass 
    vars...


class Subclass2: MainClass 
    var isImportant: NSNumber

我想编写一个谓词,它会返回 MainClass 类型的对象,但会过滤掉属性 isImportant 设置为 falseSubclass2 对象。

因此,生成的对象数组应包括所有 MainClassSubclass1 对象。但只有Subclass2 对象的isImportant 属性设置为true

我需要为 CoreData 中的NSFetchedResultsController 的获取请求编写类似的谓词。

【问题讨论】:

也许,这里的设计是错误的。你能解释一下你的实体会是什么样子吗? 【参考方案1】:

https://www.objc.io/books/core-data/ 的第 3 章详细介绍了子实体,但基本上:您几乎不想使用它们。您可以在不使用子实体的情况下创建子类(就像您所做的那样)。这可能会解决您的问题。

【讨论】:

以上是关于NSPredicate 按仅存在于其中一个子类中的属性过滤掉结果的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 在核心数据中的多对多关系

NSPredicate,CoreData 中的空格。如何修剪谓词?

NSPredicate 中的相关 NSManagedObject

过滤掉子类结果的 NSPredicate

Cocoa 中的自定义 NSPredicate

NSPredicate 使用核心数据实体的属性