2010-06-10 10 views
6

Lo que estoy tratando es la siguiente:¿Cómo se usa ManagedObjectID de la manera correcta?

1) Crear un nuevo objeto Manged

2) Obtener su ID temporal con [myMO objectID];

3) convertir ese ID a un NSURL, por lo que puede ahorrar para futuras referencias:

NSManagedObjectID *moID = [myMO objectID]; 
NSURL *url = [moID URIRepresentation]; 

4) Guardar el contexto objeto administrado

5) Algún tiempo después, obtener esa objeto utilizando el NSURL como ID

NSManagedObjectID *moID = [[context persistentStoreCoordinator] managedObjectIDForURIRepresentation:url]; 

Y adivina qué: no funciona. Consigo un objeto vacío-estúpida detrás de

NSManagedObject *myOldMo = [context existingObjectWithID: moID error:&error]; 

... Pero como ya he dicho ... el ID es temporal cuando se crea un objeto gestionado. Entonces tiene sentido por qué esto no funciona en absoluto. Primero debo guardar el contexto, y luego obtengo una identificación persistente. El original. ¿Derecha?

¿Así que es el camino a seguir?

1) Crear el objeto gestionado

2) Guardar el contexto

3) Obtener el ID que NSURL

4) en cualquier momento posterior, por ejemplo en su próximo cumpleaños, acceda a la gestión objeto con el NSURL ;-)

Intento soñar con NSManagedObjectID como una ID de DB que puedo escribir en una hoja de postIt amarilla y pegar en el medio de mi monitor, así que me refiero a ella después del almuerzo. Ya sabes ... al menos como en los viejos tiempos donde utilizamos bases de datos a través de telnet y ejecutamos comandos SQL manualmente para consultar información de pedidos y cosas así. La identificación era lo más importante y significativo, todo el tiempo.

Pero Core Data tiene esta cosa algo extraña de NSManagedObjectID.

¿Cuáles son sus estrategias secretas? ¿De verdad reconoce muchos casos de uso donde necesitaría ese NSManagedObjectID? ¿O es algo que fácilmente podría olvidar sin dolor después?

+0

el más divertido leer siempre ... Me segunda ti. Hay varios casos de uso en los que le ENCANTARÍA tener esta ID sin tener que guardarla o mejor sin tener que cambiarla, ya que adivine qué otra persona guardó la BD mientras tanto. –

Respuesta

11

No estoy seguro de que sea un gran secreto. La documentación se describe la manera de obtener los identificadores permanentes para objetos gestionados desde el NSManagedObjectContext:

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error 

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#//apple_ref/occ/instm/NSManagedObjectContext/obtainPermanentIDsForObjects:error:

Cuestiones relacionadas