Ensemble incrément automatique dans la Base de données iOS
Je suis en utilisant la Base de Données, et que vous voulez définir un ID auto_increment comme l'un des champs qui sera unique. Est-il possible de mettre en auto_increment dans iOS à l'aide de base de données? Quelqu'un peut-il m'aider avec un petit exemple de la façon de mettre en œuvre cette?
Ci-dessous est le code par lequel je suis d'insérer des enregistrements dans la base de données. Dans le premier champ "id", je tiens à le définir comme auto_increment et de 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"];
pouvez-vous donner un exemple de ce que vous avez essayé jusqu'à présent?
stackoverflow.com/questions/4084548/...
J'ai vérifié le lien ci-dessus et il crée ID Unique, mais pas de type auto_increment. Base de données ont quelque chose de semblable à auto_increment dans MySQl?
pourquoi auriez-vous besoin d'un attribut de type autoincrement? La plupart du temps dans mysql il est utilisé pour obtenir une clé unique – dans coredata un id unique sera géré automatiquement (objectID)
Si vous souhaitez trier vos objets par la création d'ajouter un attribut stockant la date ou heure unix timbre. Si vous voulez de l'unicité de l'objet de base de données prend en charge pour vous lire stackoverflow.com/questions/1351998/...
stackoverflow.com/questions/4084548/...
J'ai vérifié le lien ci-dessus et il crée ID Unique, mais pas de type auto_increment. Base de données ont quelque chose de semblable à auto_increment dans MySQl?
pourquoi auriez-vous besoin d'un attribut de type autoincrement? La plupart du temps dans mysql il est utilisé pour obtenir une clé unique – dans coredata un id unique sera géré automatiquement (objectID)
Si vous souhaitez trier vos objets par la création d'ajouter un attribut stockant la date ou heure unix timbre. Si vous voulez de l'unicité de l'objet de base de données prend en charge pour vous lire stackoverflow.com/questions/1351998/...
OriginalL'auteur Anu Padhye | 2014-06-25
Vous devez vous connecter pour publier un commentaire.
Base de Données n'a pas d'auto-incrément de fonctionnalité. Le fait qu'il utilise SQLite en interne est la plupart du temps inutiles-- si vous vous concentrez sur SQL-like de détails, vous aurez de la Base de Données de mal.
Si vous voulez une incrémentation de domaine, vous devrez gérer vous-même. Vous pouvez enregistrer la valeur actuelle dans votre application
NSUserDefaults
. Ou vous pourriez le mettre dans les métadonnées de la persistance de stocker des fichiers de Base de Données utilise (voir modalités surNSPersistentStoreCoordinator
). Chacun est beau, assurez-vous juste de le chercher, l'incrémenter, et ré-enregistrer lorsque vous créez un nouvel objet.Mais vous n'avez probablement pas besoin de ce champ. Base de Données prend en charge les Identifiants uniques pour chaque objet géré-- voir
NSManagedObjectID
.NSManagedObjectID
n'est pas fiable car elle peut changer (par exemple, après une migration de données). Par conséquent, vous devrez créer votre propre Identifiant unique pour, dans ce cas d'un auto-incrémentation de l'ID ou similaire est un choix raisonnable.C'est pourquoi j'ai dit "probablement". Auto incrément est encore probablement une mauvaise idée depuis n'importe quelle application qui permet de synchroniser ses données (maintenant ou dans l'avenir), court le risque de doublons. Uuid sont susceptibles d'être plus en sécurité si les Identifiants uniques sont nécessaires.
Si c'est pourquoi vous avez dit "probablement", alors vous devriez avoir continué à le mentionner. C'est une utile mise en œuvre détail pour toute personne qui pourrait s'appuyer sur
NSManagedObjectID
la pensée qu'il était un IDENTIFIANT persistant entre l'application se lance. Je suis d'accord avec vous au sujet de AutoIncrement, cependant nous sommes aussi allés avec des Uuid à la fin, pour la même raison.J'ai été de répondre à une seule question, de ne pas fournir une analyse détaillée de tous les usages possibles des Id uniques dans les Données de Base et les implications de
NSManagedObjectID
. Ma réponse explique comment atteindre l'objectif énoncé dans la question.Il n'y a rien de mal avec votre réponse.
OriginalL'auteur Tom Harrington
Ici est quelque chose que vous pouvez faire, mais après l'enregistrement de l'Entrée
Donc, assurez-vous d'appeler saveContext() avant de sortir que d'autre, vous allez toujours obtenir zéro
objective-C
Swift:
getAutoIncremenet()
vraiment fiable ?Qu'est-ce que objectID dans ce domaine?
OriginalL'auteur nmortada