sqlite_sequence primary example ejemplo autoincrement auto_increment ios core-data xcode5 auto-increment nsmanagedobject

primary - Establecer auto incremento en datos Core iOS



sqlite primary key (2)

Estoy usando Core Data, y quiero establecer una identificación de auto_increment como uno de los campos que serán únicos. ¿Es posible configurar auto_increment en iOS usando datos básicos? ¿Puede alguien ayudarme con un pequeño ejemplo de cómo implementar esto?

A continuación se muestra el código a través del cual estoy insertando registros en la base de datos. En el primer campo "id", quiero configurarlo como auto_increment y no insertarlo manualmente.

- (NSManagedObjectContext *)managedObjectContext { NSManagedObjectContext *context = nil; id delegate = [[UIApplication sharedApplication] delegate]; if ([delegate performSelector:@selector(managedObjectContext)]) { context = [delegate managedObjectContext]; } return context; } NSManagedObjectContext *context = [self managedObjectContext]; // Create a new managed object NSManagedObject *newObj = [NSEntityDescription insertNewObjectForEntityForName:@"Users" inManagedObjectContext:context]; [newObj setValue:[NSNumber numberWithInt:userId] forKey:@"id"]; [newObj setValue:theFileName forKey:@"Name"];


Aquí hay algo que puede hacer, pero después de guardar la Entrada, asegúrese de llamar a saveContext () antes de obtener que, de lo contrario, siempre obtendrá cero.

C objetivo

- (int)getAutoIncrement:(InAppMessage*)inApp { int number = 0; NSURL *url = [[inApp objectID] URIRepresentation]; NSString *urlString = url.absoluteString NSString *pN = [[urlString componentsSeparatedByString:@"/"] lastObject]; if ([pN containsString:"p"]){ NSString *stringPart = [pN stringByReplacingOccurrencesOfString:@"p" withString:@""] number = stringPart.intValue } url = nil; urlString = nil; pN = nil; stringPart = nil; return number; }

Rápido:

func getAutoIncremenet() -> Int64 { let url = self.objectID.uriRepresentation() let urlString = url.absoluteString if let pN = urlString.components(separatedBy: "/").last { let numberPart = pN.replacingOccurrences(of: "p", with: "") if let number = Int64(numberPart) { return number } } return 0 }


Los datos básicos no tienen una función de incremento automático. El hecho de que use SQLite internamente es en su mayoría irrelevante: si se enfoca en detalles similares a los de SQL, los datos del Core estarán muy equivocados.

Si desea un campo incremental, tendrá que administrarlo usted mismo. Puede guardar el valor actual en los NSUserDefaults su aplicación. O puede colocarlo en los metadatos para el archivo de almacenamiento persistente que usa Core Data (consulte los métodos en NSPersistentStoreCoordinator ). Cualquiera de los dos está bien, solo asegúrate de buscarlo, incrementarlo y volver a guardarlo cuando crees un nuevo objeto.

Pero probablemente no necesite este campo. Los datos básicos ya manejan las ID únicas para cada objeto administrado; consulte NSManagedObjectID .