De nombreux sujets ont dĂ©jĂ Ă©tĂ© Ă©crits avec Core Data, mais la plupart de ces articles sont en anglais, ainsi qu'en utilisant beaucoup de mots «intelligents» qui peuvent dĂ©router les dĂ©butants.Dans cet article, je vais essayer de parler de ce cadre d'Apple dans un langage comprĂ©hensible afin que mĂȘme les "plus petits" programmeurs puissent obtenir des informations pour eux-mĂȘmes et obtenir le minimum de connaissances qui les aideront dans leurs projets.Petit hors-sujet
Core Data est un outil trÚs puissant qui vous permet d'enregistrer des données dans votre application et de les utiliser plus tard. Dans cet article, je ne parlerai PAS de travailler avec plusieurs contextes avec une synchronisation ultérieure, comment résoudre les problÚmes de migration et diverses fonctionnalités avancées.Le public cible de cet article est constitué de personnes n'ayant généralement aucune expérience avec Core Data.Eh bien ... Commençons!
Pour commencer, vous devez crĂ©er le fichier .xcdatamodeld lui-mĂȘme, aprĂšs l'avoir ouvert, au bas de l'Ă©cran, vous verrez le bouton "Ajouter une entitĂ©". En cliquant dessus, votre modĂšle d'objet sera créé:
Et maintenant, plus en détail:- Votre entité. Vous pouvez considérer Entity comme votre structure de données, qui a l'héritage d'une certaine classe - NSManagedObject, et aura également certains champs pour écrire des données, plus à ce sujet plus tard.
- Attributes. Entity . + . :
- Integer 16/32/64 â . , . Int, .
: Integer16(15) - Decimal/Double/Float â . , .
- String â .
- Boolean â .
- Date â Date.
NOTE: Core Data 00:00:00 UTC 1 1970 .
- Binary Data â Data
NOTE: Allow External Storage. Core Data , 100 , Core Data . .
- UUID â UUID.
- URI â URL
- Transformable â , NSCoding.
- Relationship. Entity. Relationships :
- One-to-One
- One-to-Many
- Many-to-Many
Relationships.
3 Entities, Andrey, Home, Car.
- â One-to-One Relationship.
- 1, 2 â One-to-Many Relationship.
- Many-to-Many Relationship . .
- Entity
- Champ Codegen. En bref, ce champ indique qui rĂ©gira la crĂ©ation des classes NSManagedObject. Pour une facilitĂ© d'utilisation, sĂ©lectionnez Manuel / Aucun , puis Core Data pourra crĂ©er les classes nĂ©cessaires pour votre entitĂ© elle-mĂȘme. Ă ce sujet ci-dessous.
Pour créer notre classe Entity, utilisez:Editor> Create NSManagedObject Subclass.
Si vous souhaitez définir des valeurs par défaut pour vos attributs, utilisez la méthode:public override func awakeFromInsert() {
super.awakeFromInsert()
date = Date()
}
Travailler avec NSManagedObjectContext et PersistentStoreCoordinator
Hiérarchie de la pile de données de base:
en termes simples, toutes vos entités sont affichées en tant qu'objets gérés dans le diagramme ci-dessus. Tous nos objets gérés sont stockés dans NSManagedObjectContext. Contexte Il fait référence au NSPersistentStoreCoordinator qui stocke vos données enregistrées sous forme de cache de lignes aprÚs avoir accédé à SQL, mais ce n'est plus le cas actuellement.Pour créer une instance de votre ManagedObject (Entity), vous devez vous référer à votre NSPersistentContainer qui est un wrapper pour votre NSPersistentStoreCoordinator.var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "SavingLearn")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
Ensuite, nous devons accéder à NSManagedObjectContext via notre PersistentContainer:var context: NSManagedObjectContext = {
return persistentContainer.viewContext
}()
Nous pouvons maintenant créer une instance de notre ManageObject à partir de notre contexte et lui affecter une valeur:var person = Person(context: context)
person.age = 32
Enregistrement d'un objet
Pour économiser, nous utilisons une fonction simple:func saveContext () {
if context.hasChanges {
do {
try context.save()
} catch {
context.rollback()
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
Dans la méthode ci-dessus, nous vérifions notre contexte pour les changements et s'ils sont présents, nous faisons une sauvegarde. En cas d'erreur, la méthode est exécutée:context.rollback()
rollback()
La méthode ramÚne notre contexte à son état d'origine et annule toutes les modifications qui y ont été apportées.
Supprimer un objetcontext.delete(object)
Nous permet de supprimer facilement un objet de Core Data.REMARQUE: pour que les modifications prennent effet, il est nécessaire d'enregistrer le contexte, sinon toutes les modifications ne seront pas enregistrées.context.save()
Récupération de tous les objets
Afin d'obtenir un tableau de nos objets à partir de Core Data, nous devons effectuer NSFetchRequest. Je n'entrerai pas profondément dans la pleine puissance de FetchRequest puisque cet article est conçu pour les débutants.let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
let objects = try context.fetch(fetchRequest)
Sous le capot, NSFetchRequest fait un excellent travail:- NSFetchRequest va au coordinateur de magasin persistant
- Le coordinateur du magasin persistant envoie une demande au magasin persistant
- Persistent Store SQL
- SQL . ID Row Value. Row Value Persistent Store Row Cache ID.
- Persistent Store Managed Objects ID Persistent Store Coordinator. fault () . Managed Object Context ID, Core Data SQL.
- Persistent Store Coordinator context Managed Object
- Core Data .
includePendingChanges = false
- NSManagedObject
REMARQUE: pendant que le contexte d'objet géré NSFetchRequest est en cours d'exécution et que le coordinateur de magasin persistant s'exécute dans une file d'attente synchrone, tous les processus sont bloqués pendant qu'un autre processus est en cours d'exécution.
Conclusion
Dans cet article, j'ai dĂ©crit les informations minimales nĂ©cessaires pour travailler avec Core Data Ă mon avis.Vous pouvez maintenant crĂ©er vos propres modĂšles de donnĂ©es, les enregistrer, les supprimer et les rĂ©cupĂ©rer.Si vous ĂȘtes intĂ©ressĂ© par un sujet plus «avancé» sur l'utilisation de Core Data et des conseils intĂ©ressants, Ă©crivez dans les commentaires et je trouverai ce qui peut ĂȘtre fait Ă ce sujet. Bon codage!