Скажем, у меня есть сущности, организованные в иерархии, где Parent
является корневым объектом, а Child
является подклассом Parent
. Я хотел бы настроить NSArrayController
для выборки только сущностей Parent
, но не Child
.
Если вы установите для имени объекта контроллера массива в Интерфейсном Разработчике значение Parent
, оно извлекает все объекты Parent
и Child
. Первоначально я попытался установить предикат выборки контроллера массива в Интерфейсном Разработчике:
entity.name == "Parent"
Это работало для хранилища XML, но когда я переключился на хранилище SQLite, оно больше не работало. Я получаю следующую ошибку:
keypath entity.name not found in entity <NSSQLEntity xxx>
В качестве обходного пути я устанавливаю предикат фильтра (с тем же предикатом entity.name
, что и выше) в моем awakeFromNib
, чтобы фильтровать только родительские объекты. Очевидно, этот предикат действителен, когда объекты находятся в памяти, но вы не можете использовать его в предикате выборки с поддержкой SQL.
Есть ли способ извлечь только Parent
сущности, но не Child
сущности, используя предикат выборки, который работает с хранилищем SQLite? Кажется расточительным извлекать сущности, которые вы будете игнорировать только с помощью предиката фильтра.