假设我有按层次结构组织的实体,其中 Parent
是根实体,Child
是 Parent
的子类。我想设置一个 NSArrayController
来仅获取 Parent
的实体,而不是 Child
。
如果您在 Interface Builder 中将数组 Controller 的实体名称设置为 Parent
,它将获取所有 Parent
和 Child
实体。我最初尝试在 Interface Builder 中将数组 Controller 的获取谓词设置为:
entity.name == "Parent"
这适用于 XML 存储,但当我切换到 SQLite 存储时,它不再起作用。我收到以下错误:
keypath entity.name not found in entity <NSSQLEntity xxx>
作为解决方法,我在 awakeFromNib
中设置一个过滤谓词(具有与上面相同的 entity.name
谓词)以仅过滤父实体。显然,一旦实体进入内存,该谓词就有效,但您不能在 SQL 支持的获取谓词中使用它。
有没有办法使用与 SQLite 存储一起使用的获取谓词来仅获取 Parent
实体,而不获取 Child
实体?引入您只会用过滤谓词忽略的实体似乎很浪费。
最佳答案
Leopard 正是出于此目的向 NSFetchRequest 引入了 includesSubentities
属性。您必须对 NSObjectController 或 NSArrayController 进行子类化,以通过其 defaultFetchRequest
属性提供它将使用的获取请求,或者通过覆盖其 -fetchWithRequest:...
方法。
关于cocoa - 获取核心数据实体,但不获取子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/298013/