iphone - tipos - que es una clave principal en access
Clave principal de datos principales (6)
Core Data tiene su propia clave principal; no es necesario agregar una. Puedes recuperarlo con
NSManagedObjectID *moID = [managedObject objectID];
Esto puede parecer estúpido, pero aún no pude entender cómo marcar un atributo como clave principal en el archivo xcdatamodel. Mi almacenamiento persistente es archivo sqlite. ¿Alguien puede ayudarme?
En ese caso, ¿cómo puedo "validar" una identificación para que sea única? ¿Debo escribir un método de validación o algo así?
Prefiero usar Time + the Class name como el identificador único.
Sin hackear NSManagedObjectID puede realizar una comprobación rápida de su atributo antes de administrar su colección de datos remota.
He hecho un método de utilidad, compruébalo aquí
Tenga en cuenta que Core Data es un marco de persistencia de objeto-gráfico, no una base de datos. Las cosas como las claves primarias se abstraen porque dependen de la implementación de la tienda persistente.
Tus opciones son:
- Uso
-[NSManagedObject objectID]
. Tenga en cuenta que esta ID es temporal hasta que el objeto se guarde por primera vez o llame-[NSManagedObjectContext obtainPermanentIDsForObjects:error:]
- Use la familia de funciones
CFUUID
para generar un UUID para cada objeto en su método-awakeFromInsert
- Cree su propio sistema de clave principal que almacene un número entero en su modelo y lo incremente con la creación de cada objeto
No hay una buena forma de validar que una propiedad sea única. Lo más cerca que obtendrá es asegurarse de que sea único en el momento de la creación, y luego implementar un método setter personalizado que impida que cualquiera pueda cambiar el ID.
a veces, cuando se piratea, se necesita la int real de la clave primaria. así es como uno puede agarrarlo:
NSManagedObjectID *yourManagedObjectID = [yourManagedObject objectID];
int yourManagedObject_PK = [[[[[yourManagedObjectID URIRepresentation] absoluteString] lastPathComponent] substringFromIndex:1] intValue];
a pesar de que CoreData sea un gráfico de objetos, si se observan los datos de base de datos SQLite generados por CoreData, esta forma de capturar la clave primaria de un NSManagedObject no debería ser un problema. ii han usado CoreData y la biblioteca de bajo nivel sqlite3 C juntas en el mismo código y pasar las claves principales de CoreData a sqlite3 para buscar registros funciona bien.
! Si tiene la intención de utilizar este código en producción, tenga en cuenta los posibles cambios internos en la forma en que la clave primaria de db se transforma en una presentación de URIR, podría frenar su código.
disfrutar