Como dijo Barry Wark, recuerde siempre que Core Data no es un orm. Los detalles de Pure SQL no están expuestos al usuario y cada fila es solo un objeto. Por cierto, en algún momento deberás acceder a la "clave principal", por ejemplo, cuando necesites sincronizar la base de datos coredata con bases de datos sql externas (en mi caso, la necesité en una función de devolución de llamada para cambiar el estado de un objeto luego de INSERTAR con éxito en el db remoto). En este caso, puede utilizar:
objectId=[[[myCoredataObject objectID] URIRepresentation] absoluteString]
que devolverá una cadena como: x-coredata: // 76BA122F-0BF5-4D9D-AE3F-BD321271B004/Objeto/p521, que es el identificador único utilizado por coredata a identifica ese objeto.
Si usted quiere volver un objeto con ese id único:
NSManagedObject *managedObject= [managedObjectContext objectWithID:[persistentStoreCoordinator managedObjectIDForURIRepresentation:[NSURL URLWithString:objectId]]];
NB: Recuerde que si el receptor aún no se ha guardado en el contexto CoreData, el ID de objeto es un valor temporal que se cambiar cuando se guarda el objeto
Ojalá pudiera darle otra ventaja para 'Core Data is not a database'. – Abizern
Existen casos de uso comunes en los que debe tomar un objeto por su id. Me viene a la mente pasar datos de una selección de celda de vista de tabla a un controlador de vista de detalle. Simplemente podría pasar el objeto en sí, pero a menudo no desea hacerlo si está utilizando un contexto diferente en el detalle VC. – memmons
@Michael: Exactamente. ¿Cuál es la mejor práctica para hacer esto? – Noah