NSPredicate для исключения NSManagedObjects, которые не были сохранены в NSFetchedResultsController - PullRequest
0 голосов
/ 16 марта 2010

Опираясь на этот вопрос , мне удалось использовать группы отмены и один контекст управляемого объекта для обработки добавления Cocktail, который может ссылаться на существующие Ingredients и / или Brands.

Теперь я застрял в нитке пользовательского интерфейса - в контроллере извлеченных результатов (отсортированном по cocktail.name) вы можете кратко увидеть пустую строку для добавляемого Cocktail.Маркус Зарра предложил:

Вы можете добавить к предикату отфильтровать несохраненные объекты, например, используя (entity.isTemporaryID == NO).

, но каждая итерация, которую я пробовал, приходитназад с ошибками вида

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath entity.isTemporaryID not found in entity <NSSQLEntity Cocktail id=4>'

Как можно выполнить эквивалент [[cocktail objectID] isTemporaryID] в NSPredicate?

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Вызов для идентификатора объекта, а не для управляемого объекта:

BOOL isTemporary = [[managedObject objectID] isTemporaryID];

Подробнее см. В этом разделе Руководство по программированию базовых данных .

Я не уверен, почему вы видите пустую строку для не добавленной сущности. Если объект не был добавлен, то он должен быть извлечен контроллером полученных результатов. Похоже, вы вставили объект в контекст, но еще не заполнили его.

Если это так, вы можете использовать предикат для исключения сущностей, у которых некоторые или все их свойства пусты. Если вы в конечном итоге делаете это много, вы можете захотеть добавить свойство класса к классу, которое будет возвращать NO (через пользовательский метод получения), если объект не находится в состоянии для отображения.

0 голосов
/ 16 марта 2010
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath entity.isTemporaryID not found in entity <NSSQLEntity Cocktail id=4>'

Как можно выполнить эквивалент [[идентификатор объекта коктейля] isTevenID] в NSPredicate?

Сделай это.

То, что вы просили, это не [[cocktail objectID] isTemporaryID], а [[cocktail entity] isTemporaryID]. Если вы хотите objectID (что вы и делаете, поскольку хотите спросить, является ли это временным идентификатором), то это то, что вам нужно запросить в вашем ключевом пути.

Вы должны прочитать Руководство по программированию кодирования значения ключа , даже если вы уже прочитали его, и найти entity и objectID методы в ссылка NSManagedObject . Из них вы поймете, что Маркус Зарра либо перепутал их, либо имел в виду objectID, но набрал entity случайно. Это случается со всеми - поэтому хорошо всегда проверять документы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...