Вы хотите:
-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
error:(NSError **)error
Извлекает объект из магазина, у которого есть этот идентификатор, или ноль, если он не существует.
(Имейте в виду: есть два метода наNSManagedObjectContext с похожими именами, которые сбили меня с толку. Чтобы помочь им оставаться прямыми, вот что делают два других:
-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID
... создаст объект ошибки с предоставленным objectID, лиили нет такой объект действительно существует в хранилище. Если он не существует, все, что вызывает ошибку, завершится неудачей, если вы сначала не вставите объект с помощью NSManagedObjectContext insertObject:
. Единственное использование, которое я нашел для этого, этокопирование объектов из хранилища в хранилище при сохранении идентификаторов объектов.
-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID
... вернет объект, имеющий этот идентификатор, , если он был выбран из хранилища с помощью управляемогоObjectContext.Кто-нибудь знает, для чего этот метод полезен, пожалуйста, прокомментируйте.)
[eta .: Другое важное различие между первым методом и двумя другими состоит в том, что existingObjectWithID:error:
никогда не возвращаетсяs ошибка;он всегда выбирает весь объект для вас.Если вы пытаетесь избежать этого (например, работаете с дорогим для извлечения объектом с большим свойством большого двоичного объекта), вы должны быть умны с objectWithID:
или objectRegisteredForID:
, которые не вызывают сбои;или используйте правильно настроенный запрос на выборку.]