Как проверить наличие ссылки на NSManagedObject?

#iphone #core-data #reference #nsuserdefaults #nsmanagedobject

#iPhone #core-data #ссылка #nsuserdefaults #nsmanagedobject

Вопрос:

Я успешно сохранил и извлек ссылку на NSManagedObject, используя пример, найденный на этом сайте http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html

Проблема в том, что приложение вылетает при попытке восстановить NSManagedObject, который был удален.

Я попробовал метод isFault для объекта, но он всегда возвращает no, даже если объект существует.

Вот мой код, который я использую для его извлечения:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *myData = [prefs objectForKey:@"activatedObject"];
if (myData)
{
    NSURL *myURL = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
    NSManagedObjectID *myID = [self.persistentStoreCoordinator managedObjectIDForURIRepresentation:myURL];
    id myObject = [self.managedObjectContext objectWithID:myID];
    self.Object = myObject;
} 
  

Ответ №1:

Вы можете попробовать вызвать этот метод:

 NSError *error = nil;
id myObject = [self.managedObjectContext existingObjectWithID:myID error:amp;error];
  

Если объект, указанный myID, не может быть извлечен, или не существует, или не может быть исправлен, он возвращает nil.

Ответ №2:

В документах упоминается, что объект должен быть сохранен в хранилище перед получением ObjectId. Получаете ли вы ее перед сохранением хранилища?

Кроме того, просто подумайте о сохранении значения уникального свойства объекта и просто выполните поиск вместо этого.

Комментарии:

1. Да, он сохранен. Я извлекаю его сразу после запуска приложения. Было бы сложно установить уникальное свойство, а затем выполнить поиск по нему… Но я попробую, если есть какое-либо другое решение.

2. Это лишь немного сложнее. Вам не нужно создавать уникальное свойство. Надеюсь, для каждой сущности уже есть уникальное свойство. Создание запроса на выборку на основе чего-то вроде свойства «name» довольно тривиально.