128 votes

Comment obtenir l’objet de base de données de l’ID de l’objet spécifique ?

Je peux facilement obtenir ID d’un objet dans la base de données en utilisant le code suivant :

Cependant, est-il un moyen pour obtenir un objet hors du magasin de données de base, en lui donnant un ID d’objet spécifique ? Je sais que je peux faire cela en utilisant un NSFetchRequest, comme ceci :

Cependant, je voudrais le faire d’une manière qui n’entame pas sa propre demande d’extraction. Toutes les idées ?

215voto

rgeorge Points 4568

Vous souhaitez:

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

Récupère l'objet à partir de la boutique qui a l'IDENTIFIANT, ou nil s'il n'existe pas.

(Attention: il existe deux méthodes sur NSManagedObjectContext avec même semblant de noms qui a déclenché moi. Pour aider à garder leur droite, voici ce que les deux autres:

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

...permettra de créer un défaut de l'objet avec le objectID, si oui ou non un tel objet existe réellement dans le magasin. S'il n'existe pas, tout ce qui déclenche l'erreur sera pas, sauf si vous insérez un objet en premier avec NSManagedObjectContext de l' insertObject:. La seule utilisation que j'ai trouvé pour ce qui est de la copie d'objets à partir d'un magasin à l'autre tout en préservant ObjectIDs.

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

...sera de retour l'objet qui a l'IDENTIFIANT, si elle a été récupérée à partir de la boutique en ce managedObjectContext. Si quelqu'un sait ce que cette méthode est utile pour, s'il vous plaît commentaire.)

[eta.: Une autre différence importante entre la première méthode et les deux autres c'est qu' existingObjectWithID:error: ne retourne jamais une faute; il est toujours récupère l'ensemble de l'objet pour vous. Si vous êtes en essayant d'éviter qu' (par exemple, travailler avec un cher-pour-aller chercher un objet avec un gros blob de la propriété), vous devez être à l'aise avec les objectWithID: ou objectRegisteredForID:, ce qui n'est pas le feu défauts; ou utiliser correctement configuré extraire la demande.]

5voto

quellish Points 5475

objectWithID: est la méthode que vous êtes à la recherche pour, et c'est la méthode recommandée pour ce faire. objectWithID: permettra d'utiliser efficacement les NSManagedObjectContext tire l'objet qu'autant de niveaux que nécessaire - à la différence des autres moyens de le faire. objectWithID: permettra d'utiliser correctement les informations en mémoire dans le parent contextes, la persistance de coordonnateur du magasin, et la persistance de la boutique elle-même avant d'aller dans le support de stockage.

Ce sujet est abordé en profondeur dans la WWDC 2012 session "Base de Données des Meilleures Pratiques".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X