【Xcode】iOSアプリ開発途中からCore Dataを使いたい場合の対処法

記事内に商品プロモーションを含む場合があります

Core Dataを使うにはプロジェクトの作成時に「Use Core Data」を選択しておく必要がありますが、うっかり忘れてしまったり、途中で必要になった場合の対処法を紹介します。

開発途中からCore Dataを使うための手順

全体の流れを整理しておくと、次のようになります。

  1. ダミープログラムを作る
  2. Core Dataに関する記述をコピーする
  3. 開発中のプロジェクトにペーストする
  4. 開発中のプロジェクトにData Modelを作成する
  5. 足りない設定を追加する

ダミーのプロジェクトを作る際に、「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」を記述が必要なので忘れないようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA