假设我在层次结构中组织了Parent
实体,Child
它们是根实体并且是子类Parent
.我想设置一个NSArrayController
只获取实体Parent
,但不是Child
.
如果您在Interface Builder中设置的实体名称的阵列控制器来Parent
,它获取所有Parent
和Child
实体.我最初尝试在Interface Builder中将数组控制器的fetch谓词设置为:
entity.name == "Parent"
这适用于XML存储,但是当我切换到SQLite存储时,它不再起作用.我收到以下错误:
keypath entity.name not found in entity
作为一种解决方法,我在我的设置过滤谓词(具有与entity.name
上面相同的谓词)awakeFromNib
仅过滤父实体.显然,一旦实体在内存中,该谓词就有效,但您不能在SQL支持的提取谓词中使用它.
有没有办法只提取Parent
实体,而不是Child
使用与SQLite存储一起使用的提取谓词的实体?使用过滤谓词来提取您只会忽略的实体似乎很浪费.
includesSubentities
为了这个目的,Leopard将该属性引入了NSFetchRequest.您必须子类化NSObjectController或NSArrayController以提供它将通过其defaultFetchRequest
属性使用的获取请求,或者通过覆盖其-fetchWithRequest:...
方法来更改它使用的获取请求.