C'est parti, nous allons installer Core Data. Et comme on l'a vu dans le chapitre précédent, nous allons commencer par ajouter un fichier xcdatamodeld
.
Ajoutez le fichier xcdatamodeld
Avant toute chose, nous allons créer un dossier CoreData dans notre modèle :
Puis, comme pour ajouter n'importe quel fichier, vous allez vous rendre dans File > New > File… Et dans la section Core Data, vous allez choisir Data Model.
Vous cliquez sur Next. Puis vous pouvez donner un nom à votre fichier. En général, on lui donne le nom du projet, donc ici Cekikapeye. Et vous faites bien attention à le sauvegarder dans votre nouveau dossier CoreData
.
Votre fichier est créé et apparaît dans le navigateur :
On a vu dans le chapitre précédent que la deuxième étape était l'instanciation de NSPersistentContainer
, alors allons-y ! Nous allons donc créer une classe dédiée à son instanciation et sa gestion : la CoreDataStack
.
Créez la CoreDataStack
Lorsque l’on souhaite instancier un objet une seule fois et toujours atteindre la même instance, on peut utiliser un pattern appelé le “Singleton Pattern”. Ce pattern permet donc d’avoir toujours la même instance d’un objet dans la mémoire, en atteignant une propriété static
la représentant elle-même. Voyez ci-dessous :
final class CoreDataStack {
// MARK: - Singleton
static let sharedInstance = CoreDataStack()
// MARK: - Public
var myProperty: AnyObject? // <--- Propriété exemple
}
Ainsi, si l’on souhaite atteindre une propriété de cette classe, on écrira CoreDataStack.sharedInstance.myProperty
.
Et vous pourrez donc atteindre myProperty
partout dans votre code. C’est extrêmement puissant, mais attention, ce concept doit être utilisé avec précaution. Je vous montrerai d’ailleurs plus loin comment faire, afin de rendre un jour notre code testable.
Ajoutez la propriété persistentContainer
On va donc rajouter une propriété dans notre classe CoreDataStack
, qui va nous permettre d'avoir accès partout dans le code à la propriété viewContext
de notre NSPersistentContainer
.
Mais commençons par le persistentContainer
:
// MARK: - Private
private lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Cekikapeye")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
Comme dit précédemment, le persistentContainer
a pour rôle d’encapsuler l’instance de votre stack Core Data. On va donc créer à l’intérieur une propriété calculée afin de retourner la configuration voulue.
Il faut par ailleurs préciser le nom de la base que l’on souhaite instancier (dans notre cas, Cekikapeye), et potentiellement traiter une erreur de chargement. Ici nous n’irons pas plus loin qu’un méchant fatalError
, mais je vous conseille grandement de traiter convenablement ce genre d’erreur dans vos applications !
Récupérez le contexte
La dernière étape, c'est de récupérer le contexte puisque, comme on l'a vu au chapitre précédent, c'est dans le contexte que nous allons manipuler les données.
Pour cela, nous allons tout simplement utiliser la propriété viewContext
de type NSManagedObjectContext
de la classe NSPersistentContainer
. Cette propriété retourne un contexte à utiliser dans le Main Thread, celui dans lequel les vues sont gérées. D'où son nom.
Pour les mêmes raisons pratiques, je vous propose qu'on crée une propriété publique :
// MARK: - Public
var viewContext: NSManagedObjectContext {
return CoreDataStack.sharedInstance.persistentContainer.viewContext
}
Et voilà ! On pourra utiliser notre contexte partout dans notre code en écrivant simplement CoreDataStack.sharedInstance.viewContext
.
En résumé
On suit quatre étapes pour installer Core Data :
On crée un fichier
xcdatamodeld
.On crée un
CoreDataStack
.On crée une propriété
persistentContainer
dansCoreDataStack
, qu'on initialise avec le nom du fichier`xcdatamodeld`
.On récupère le contexte via la propriété
viewContext
deNSPersistentContainer
.
Dans le prochain chapitre, nous allons créer notre première entité grâce à notre fichier xcdatamodeld
!