web-dev-qa-db-fra.com

Définir l'incrémentation automatique dans les données de base iOS

J'utilise Core Data et je souhaite définir un ID auto_increment comme l'un des champs qui seront uniques. Est-il possible de définir auto_increment dans iOS à l'aide des données de base? Quelqu'un peut-il m'aider avec un petit exemple de la façon de mettre en œuvre cela?

Ci-dessous, le code par lequel j'insère des enregistrements dans la base de données. Dans le premier champ "id", je veux le définir comme auto_increment et ne pas l'insérer manuellement.

- (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"];
20
Anu Padhye

Core Data n'a pas de fonction d'incrémentation automatique. Le fait qu'il utilise SQLite en interne n'est généralement pas pertinent - si vous vous concentrez sur des détails de type SQL, vous vous tromperez mal.

Si vous voulez un champ d'incrémentation, vous devrez le gérer vous-même. Vous pouvez enregistrer la valeur actuelle dans le NSUserDefaults de votre application. Ou vous pouvez le mettre dans les métadonnées du fichier de stockage persistant utilisé par Core Data (voir les méthodes sur NSPersistentStoreCoordinator). Soit c'est bien, assurez-vous simplement de le rechercher, de l'incrémenter et de le ré-enregistrer lorsque vous créez un nouvel objet.

Mais vous n'avez probablement pas besoin de ce champ. Core Data gère déjà des ID uniques pour chaque objet géré - voir NSManagedObjectID.

28
Tom Harrington