gratis desde cuenta crear contraseña como apple activo activar iphone cocoa-touch core-data

iphone - desde - id de apple y contraseña gratis



Creando una identificación única para un programa de Datos Core en el iPhone (9)

Estoy teniendo problemas para entender esto de Core Data. ¿Cómo creo una nueva entrada con una identificación única? En SQL, simplemente declararía un campo como un campo de autoincrement. No veo nada como eso aquí, pero podría estar perdiendo algo. Solo quiero un campo NSInteger incremental automático, así que cuando agregue elementos manualmente a la base de datos, tendré alguna forma de referencia sobre ellos.


¿Qué sucede si queremos sincronizar con una base de datos remota que no necesita identificadores autoincrementados para filas de datos únicas? ¿Hay alguna manera de implementar identificadores autoincrementados si es necesario? Entiendo que no es obligatorio para los datos centrales, pero necesito importar datos de una base de datos remota y luego subirlos nuevamente y asegurarme de que los ID estén intactos.


Actualiza a la respuesta de @Lukasz en Swift:

static func nextAvailble(_ idKey: String, forEntityName entityName: String, inContext context: NSManagedObjectContext) -> Int { let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName) fetchRequest.propertiesToFetch = [idKey] fetchRequest.sortDescriptors = [NSSortDescriptor(key: idKey, ascending: true)] do { let results = try context.fetch(fetchRequest) let lastObject = (results as! [NSManagedObject]).last guard lastObject != nil else { return 1 } return lastObject?.value(forKey: idKey) as! Int + 1 } catch let error as NSError { //handle error } return 1 }


Aquí hay tres tipos de representación única de ID del objeto CoreData:

NSManagedObjectID *taskID = [task objectID]; NSURL *taskUniqueURLKey = task.objectID.URIRepresentation; NSString *taskUniqueStringKey = task.objectID.URIRepresentation.absoluteString;

!!!! Nota: si desea utilizar la clave única anterior como índice, asegúrese de que el objeto esté guardado en el contexto antes de usarlo, o el Id. Del objeto sería un Id temporal, que se reemplazará más adelante (p. Ej., Después de guardarlo). Consulte el documento de apple de la clase NSManagedObjectID:

- (BOOL)isTemporaryID; // indicates whether or not this ID will be replaced later, such as after a save operation (temporary IDs are assigned to newly inserted objects and replaced with permanent IDs when an object is written to a persistent store); most IDs return NO


Aunque estoy de acuerdo con lo que dijiste, existe un mecanismo de identificación detrás de los datos centrales. La ID está gestionada por Core-Data, pero puede recuperarla con:

NSManagedObjectID *moID = [managedObject objectID];

Para obtener más información, consulte: Guía de programación de datos básicos


Eche un vistazo a: [[NSProcessInfo processInfo] globallyUniqueString] .

Documentos de Apple: identificación global para el proceso. El ID incluye el nombre de host, el ID del proceso y un sello de tiempo, lo que garantiza que el ID sea único para la red, lo cual es útil si no desea que la gente adivine el ID.


Esa no es la forma en que funciona CoreData.

En CoreData, crea instancias de entidades. Cada instancia es única. A continuación, recupera y manipula instancias según sea necesario. CoreData se ocupa de la persistencia, incluidas las instancias de identificación única.

Aléjate de todo lo que sabes sobre las bases de datos relacionales tradicionales.

Comience here .

Entonces ve here .

Específicamente, this .

CoreData es una tecnología asombrosamente poderosa que ofrece características mucho más allá de la persistencia de bases de datos. Le ahorrará muchas líneas de código y funcionará extremadamente bien si lo acepta.


Esta función de clase devolverá el siguiente número disponible para su propiedad de identificación (debe ser propiedad entera).

Lo llamo generador de valor de incremento automático. Todavía estoy de acuerdo con otros en que hay objectID para eso, pero a veces solo necesitas el número.

Puede poner esta función en su subclase NSManagedObject para la entidad:

+(NSNumber *)nextAvailble:(NSString *)idKey forEntityName:(NSString *)entityName inContext:(NSManagedObjectContext *)context{ NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSManagedObjectContext *moc = context; NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:moc]; [request setEntity:entity]; // [request setFetchLimit:1]; NSArray *propertiesArray = [[NSArray alloc] initWithObjects:idKey, nil]; [request setPropertiesToFetch:propertiesArray]; [propertiesArray release], propertiesArray = nil; NSSortDescriptor *indexSort = [[NSSortDescriptor alloc] initWithKey:idKey ascending:YES]; NSArray *array = [[NSArray alloc] initWithObjects:indexSort, nil]; [request setSortDescriptors:array]; [array release], array = nil; [indexSort release], indexSort = nil; NSError *error = nil; NSArray *results = [moc executeFetchRequest:request error:&error]; // NSSLog(@"Autoincrement fetch results: %@", results); NSManagedObject *maxIndexedObject = [results lastObject]; [request release], request = nil; if (error) { NSLog(@"Error fetching index: %@/n%@", [error localizedDescription], [error userInfo]); } //NSAssert3(error == nil, @"Error fetching index: %@/n%@", [error localizedDescription], [error userInfo]); NSInteger myIndex = 1; if (maxIndexedObject) { myIndex = [[maxIndexedObject valueForKey:idKey] integerValue] + 1; } return [NSNumber numberWithInteger:myIndex]; }


Los datos principales se utilizan para el marco de persistencia, este marco abstrae la clave principal.

Cada NSManagedObject tiene su propia clave única incorporada que está disponible en su propiedad objectID.

Esta identificación se usa internamente para vincular entidades sobre sus relaciones. No es necesario mantener un ID propio como clave principal como lo que solía hacer en SQL.

Siempre puede obtener la identificación mediante NSManagedObject.objectID. y obtención del contexto del objeto utilizando NSMananagedObjectContext.objectWithId