Core Dataを使うにはプロジェクトの作成時に「Use Core Data」を選択しておく必要がありますが、うっかり忘れてしまったり、途中で必要になった場合の対処法を紹介します。
Contents
開発途中からCore Dataを使うための手順
全体の流れを整理しておくと、次のようになります。
- ダミープログラムを作る
- Core Dataに関する記述をコピーする
- 開発中のプロジェクトにペーストする
- 開発中のプロジェクトにData Modelを作成する
- 足りない設定を追加する
ダミーのプロジェクトを作る際に、「Use Core Data」にチェックをつけることで、AppdDlegate.swiftファイルの中にCore Dataを使うための設定が追加されるので、それをコピーして開発中のプロジェクトにペーストします。
1. ダミープログラムを作る
新規で、名前はなんでもいいのでプロジェクトを作ります。
その際に「Use Core Data」にチェックをつけるのを忘れないようにしましょう。
2. Core Dataに関する記述をコピーする
プロジェクトが出来上がったら「AppDelegate.swift」を開いて、CoreDataに関する記述をコピーします。
記事執筆時はこんな感じ(一部コメントは削除してます)。
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "CoreDataTest")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
3. 開発中のプロジェクトにペーストする
先ほどコピーした内容を、開発中のプロジェクトにペーストします。
4. 開発中のプロジェクトにData Modelを作成する
開発中のプロジェクトで使うData Modelを作成します。
新規ファイル作成から、「Core Data」の「Data Model」を選択し、次へ進みます。
適当にファイル名をつけたらCreateをクリックして作成します。
Data Modelができたら、AppdDlegate.swiftの「let container = NSPersistentContainer(name: “CoreDataTest”)」のnameの箇所を、先ほど作成したData Model名に変更します。
5. 足りない設定を追加する
最後にいくつか足りない設定を追加して行きます。
① AppdDlegate.swift内のapplicationWillTerminate()メソッド内に以下を追加
func applicationWillTerminate(_ application: UIApplication) {
self.saveContext() //追加
}
② AppdDlegate.swift内の上の方でCoreDataをインポートする
import UIKit
import CoreData //追加
これでCoreDataが使えるようになります。
実際にCRUD処理を記述するコントローラー内でも、「import CoreData」を記述が必要なので忘れないようにしましょう。