Base de Données des attributs uniques
Est-il possible de faire une Base de Données de l'attribut unique, c'est à dire pas de deux MyEntity les objets peuvent avoir la même myAttribute?
Je sais comment faire pour appliquer ce par programmation, mais j'espère que il y a un moyen de le faire à l'aide de la représentation graphique du Modèle de Données de l'éditeur dans xcode.
Je suis en utilisant l'iPhone 3.1.2 SDK.
- Pourquoi cette question fermée? La raison donnée était "Questions demandant le code doit démontrer une compréhension minimale du problème étant résolu", mais je n'étais pas en train de demander le code à tous, je voulais savoir si il était possible de réaliser cela dans l'éditeur graphique dans Xcode. (La réponse efficace s'est avéré être "non, mais voici quelques solutions de contournement".)
Vous devez vous connecter pour publier un commentaire.
À chaque fois que je créer sur l'objet-je effectuer une méthode de classe qui fait une nouvelle Entité uniquement lorsque l'autre n'existe pas.
objectID
à launiqueUserID
après avoir créé un nouvel objet utilisateur dans leelse if
de la clause. Sinon, vous auriez à le faire dans la fonction qui appelleuserWithUniqueUserID
.J'ai décidé d'utiliser le
validate<key>:error:
méthode pour vérifier si il est déjà un Objet Géré avec la valeur spécifique de la<key>
. Une erreur est déclenchée si c'est le cas.Par exemple:
Merci à Martin Cote pour son entrée.
self.managedObjectContext
, pour vous assurer de vérifier les doublons de l'existence dans le bonmanagedObjectContext
. Sinon, Enregistrer sous (qui est, la migration vers les nouvelles url) échouera.De IOS 9, il existe une nouvelle façon de gérer les contraintes unique.
Vous définissez les attributs uniques dans le modèle de données.
Vous devez définir un contexte de la gestion de la politique de fusion "Fusion politique singleton objets qui définissent les manières de gérer les conflits pendant une opération de sauvegarde" NSErrorMergePolicy est la valeur par défaut,Cette politique provoque un enregistrement à l'échec si il y a des conflits de fusion.
Les diverses options sont discutées au Apple Ducumentation De Fusion De La Politique
Il est répondu gentiment ici
Zachary Orr Réponse
et il a gentiment également créé un blog et un exemple de code.
Exemple De Code
Post De Blog
La partie la plus difficile est d'obtenir le Modèle de données d'attributs modifiables.Le Secret est de gauche, cliquez sur et puis cliquez avec le bouton droit après que vous avez cliqué sur le signe + pour ajouter une contrainte.
Vous pourriez remplacer le
setMyAttribute
méthode (à l'aide de catégories) et d'assurer l'unicité de là, même si cela peut être coûteux:Si vous voulez vous assurer que chaque
MyEntity
instance dispose d'unemyAttribute
valeur, vous pouvez utiliser leobjectID
de laNSManagedObject
les objets qui que ce soit.J'ai vraiment aimé @DoozMen approche!!
Je pense que c'est la meilleure façon de faire ce que je devais faire.
C'est la façon dont je l'ai installé dans mon projet:
Le code suivant des cycles lors du dessin d'une assez longue tableView, l'enregistrement dans la base de données d'un objet pour chaque ligne de la table, et à fixer les divers attributs de l'objet pour chacun d'eux, comme
UISwitch
les états et d'autres choses: si l'objet de la ligne avec un certain balise n'est pas présente à l'intérieur de la DB, il le crée.Prendre un coup d'oeil à la Pomme la documentation pour la validation de propriété. Il décrit comment vous pouvez valider un particulier d'insertion ou de mise à jour de l'opération, tout en étant en mesure de consulter la base de données entière.