cocoacore-datasave

NSManagedObjectID into NSData


I found this wonderful NSManagedObjectID. This would be very good for referencing an Entity/NSManagedObject/NSEntityDescription, right?
Let's get an ID from an entity:

NSEntityDescription *entity = [self newEntity];     
NSManagedObjectID *objID = [entity objectID];

So... any idea how to get this objID into a string? Or better: NSData. Actually something to be able to save it to the NSUserDefaults. ;-)

Btw: NSFetchRequest doesn't want to work in my case. I use an modified version of this example: answer of an old question.


Solution

  • To get an archived URI corresponding to a NSManagedObject's objectID:

    NSManagedObject* myMO;
    ...
    NSURL *uri = [[myMO objectID] URIRepresentation];
    NSData *uriData = [NSKeyedArchiver archivedDataWithRootObject:uri];
    

    In order to get back to an instance of the original managed object, you need a CoreData stack with the persistent store holding that instance already added to the NSPersistentStoreCoordinator. Then:

    NSData *uriData;
    NSPersistentStoreCoordinator *psc;
    NSManagedObjectContext *moc; //with moc.persistentStoreCoordinator = psc.
    ...
    NSURL *uri = [NSKeyedUnarchiver unarchiveObjectWithData:uriData];
    NSManagedObjectID *moID = [psc managedObjectIDForURIRepresentation:uri];
    NSManagedObject *myMO = [moc objectWithID:moID];