2010-03-24 14 views
1

I avec succès et récupéra une emmagasinés référence à un NSManagedObject en utilisant l'exemple trouvé dans ce site http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.htmlComment vérifier l'existence d'une référence à un objet NSManagedObject?

Le problème est, l'accident d'application whene triying pour récupérer un NSManagedObject qui a été supprimé.

J'ai essayé la méthode isFault sur l'objet, mais elle renvoie toujours non, même si l'objet est là.

Voici mon code que j'utilise pour le récupérer:

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

Répondre

1

Vous pouvez essayer cette méthode est appelée:

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

Si l'objet spécifié par myID ne peut pas être récupérée, ou n'existe pas, ou ne peut être blâmé, il retourne nul.

+0

Cela n'a pas fonctionné pour moi. –

0

Les documents mentionnent que l'objet doit être enregistré dans le magasin avant d'obtenir le objectID. L'obtenez-vous avant de sauver le magasin? En outre, considérez simplement d'enregistrer la valeur d'une propriété unique de l'objet et effectuez simplement une recherche à la place.

+0

Oui, c'est enregistré. Je le récupère juste après avoir déjeuné l'application. Il serait compliqué de définir une propriété unique puis de la rechercher ... Mais je vais essayer s'il y a une autre solution. – Davide

+0

C'est un peu plus compliqué. Vous ne devriez pas avoir à créer une propriété unique. Espérons qu'il existe déjà une propriété unique pour chaque entité. Créer une requête d'extraction basée sur quelque chose comme une propriété "name" est plutôt trivial. –

+0

Alors avez-vous déjà trouvé la solution? – dontWatchMyProfile