Comment get l'object de données de base à partir d'un identifiant d'object spécifique?

Je peux facilement get l'ID d'un object dans Core Data en utilisant le code suivant:

NSManagedObjectID *moID = [managedObject objectID]; 

Toutefois, existe-t-il un moyen d'extraire un object du magasin de données principal en lui atsortingbuant un ID d'object spécifique? Je sais que je peux le faire en utilisant un NSFetchRequest, comme ceci:

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext]; [fetchRequest setEntity:entity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID]; [fetchRequest setPredicate:predicate]; 

Cependant, j'aimerais le faire d'une manière qui n'initie pas sa propre requête d'extraction. Des idées?

Tu veux:

 -(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error 

Extrait l'object du magasin qui a cet ID, ou nul s'il n'existe pas.

(Attention: il y a deux methods sur NSManagedObjectContext avec des noms similaires qui m'ont fait trébucher. Pour les garder droites, voici ce que font les deux autres:

 -(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID 

… crée un object d'erreur avec l'object objectID fourni, qu'un tel object existe ou non dans le magasin. S'il n'existe pas, tout ce qui triggers l'erreur échouera à less que vous insériez l'object en premier avec insertObject: de insertObject: La seule utilisation que j'ai trouvée pour cela est de copyr des objects d'un magasin à l'autre tout en préservant les ObjectID.

 -(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID 

… returnnera l'object qui a cet ID, s'il a été récupéré du magasin par ce managedObjectContext. Si quelqu'un sait à quoi cette méthode est utile, veuillez commenter.)

[eta .: Une autre différence importante entre la première méthode et les deux autres est que existingObjectWithID:error: ne returnne jamais un défaut; il récupère toujours l'object entier pour vous. Si vous essayez d'éviter cela (par exemple, travailler avec un object cher à récupérer avec une grande propriété blob), vous devez être intelligent avec objectWithID: ou objectRegisteredForID: qui ne triggers pas d'erreurs; ou utilisez une requête d'extraction correctement configurée.]

objectWithID: est la méthode que vous searchz, et c'est la manière recommandée de le faire. objectWithID: utilisera efficacement NSManagedObjectContext pour tirer l'object uniquement sur autant de niveaux que nécessaire, contrairement à certains autres moyens. objectWithID: utilisera correctement les informations en memory dans les contexts parents, le coordinateur de stockage persistant et le magasin persistant lui-même avant d'accéder au stockage de sauvegarde.

Ceci est couvert en profondeur dans la session WWDC 2012 "Core Data Best Practices".