Cela peut sembler stupide, mais je n'arrivais toujours pas à comprendre comment marquer un attribut comme clé primaire dans le fichier xcdatamodel. Mon stockage persistant est un fichier sqlite. Quelqu'un peut-il m'aider?
Dans ce cas, comment "valider" un identifiant pour qu'il soit unique? Dois-je écrire une méthode de validation ou quelque chose?
Vos options sont:
-[NSManagedObject objectID]
. Notez que cet ID est temporaire jusqu'à ce que l'objet soit enregistré pour la première fois ou que vous appeliez -[NSManagedObjectContext obtainPermanentIDsForObjects:error:]
CFUUID
pour générer un UUID pour chaque objet dans votre -awakeFromInsert
méthodeIl n'y a aucun bon moyen de valider qu'une propriété est unique. Le plus proche que vous obtiendrez est de vous assurer qu'il est unique au moment de la création, puis d'implémenter une méthode de définition personnalisée qui empêche quiconque de modifier l'ID.
Gardez à l'esprit que Core Data est un cadre de persistance de graphe objet, pas une base de données. Des choses comme les clés primaires sont abstraites car elles dépendent de l'implémentation du magasin persistant.
Core Data crée sa propre clé primaire - vous n'avez pas besoin d'en ajouter une. Vous pouvez le récupérer avec
NSManagedObjectID *moID = [managedObject objectID];
parfois, lors du piratage, il faut l'intégralité de la clé primaire. voici comment on peut le saisir:
NSManagedObjectID *yourManagedObjectID = [yourManagedObject objectID];
int yourManagedObject_PK = [[[[[yourManagedObjectID URIRepresentation] absoluteString] lastPathComponent] substringFromIndex:1] intValue];
bien que CoreData soit un graphique d'objet, si l'on regarde les données de base de données SQLite générées par CoreData, cette façon de récupérer la clé primaire d'un NSManagedObject ne devrait pas être un problème. ii ont utilisé CoreData et la bibliothèque sqlite3 C de bas niveau ensemble dans le même code et le passage des clés primaires de CoreData à sqlite3 pour récupérer les enregistrements fonctionne très bien.
! si vous avez l'intention d'utiliser ce code en production, soyez conscient des modifications internes possibles de la façon dont la clé primaire db se transforme en représentation URI, cela pourrait freiner votre code.
prendre plaisir
Sans pirater NSManagedObjectID, vous pouvez effectuer une vérification rapide de votre attribut avant de gérer votre collecte de données à distance.
J'ai fait une méthode utilitaire, vérifiez-la ici