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

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

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

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

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

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;
} 

person Davide    schedule 24.03.2010    source источник


Ответы (2)


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

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

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

person jamapag    schedule 29.07.2010

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

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

person Corey Floyd    schedule 24.03.2010
comment
Да, он сохранен. Я получаю его сразу после обеда приложения. Было бы сложно установить уникальное свойство, а затем искать его... Но я попробую, если есть какое-то другое решение. - person Davide; 24.03.2010
comment
Это лишь немного сложнее. Вам не нужно создавать уникальное свойство. Надеюсь, для каждой сущности уже есть уникальное свойство. Создание запроса на выборку на основе чего-то вроде свойства имени довольно тривиально. - person Corey Floyd; 24.03.2010