[Xcode9] 既存プロジェクトにCoreDataを追加する方法

#場面
プロジェクト作成時に"Use CoreData"のチェックをつけなかったけど、途中から使いたくなった時

#手順
## 1) .xcdatamodeledファイルをプロジェクト内に追加
![スクリーンショット 2017-10-20 1.38.22.png](https://qiita-image-store.s3.amazonaws.com/0/159680/859da2df-c59c-e980-1974-0ebf0899f48d.png)

Data Modelをクリックし、任意の名前*で保存する
*ここでは例として、「sampleModel.xcdatamodeled」と保存したことにする

## 2) AppDelegate.swiftにコードを追加
「Class最下部へのコード追加」と「import文の追加」を行う

```AppDelegate.swift

import UIKit
import CoreData  // import文を追加!!

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    // ~
    //(中略)
    // ~

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also 
        applicationDidEnterBackground:.
    }

    // >>>>> 追加 

    // Core Data stack

    lazy var persistentContainer: NSPersistentContainer = {
        /*
         The persistent container for the application. This implementation
         creates and returns a container, having loaded the store for the
         application to it. This property is optional since there are legitimate
         error conditions that could cause the creation of the store to fail.
         */
        let container = NSPersistentContainer(name: "sampleModel")   // 1)で命名した名前 !!
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                // Replace this implementation with code to handle the error appropriately.
                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

                /*
                 Typical reasons for an error here include:
                 * The parent directory does not exist, cannot be created, or disallows writing.
                 * The persistent store is not accessible, due to permissions or data protection when the device is locked.
                 * The device is out of space.
                 * The store could not be migrated to the current model version.
                 Check the error message to determine what the actual problem was.
                 */
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    // Core Data Saving support

    func saveContext () {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                // Replace this implementation with code to handle the error appropriately.
                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }

    // <<<<< 追加
}
```

以上でCoreDataを使える

#この記事の根拠
別個に"Use CoreData"のチェックをつけたプロジェクトを作成してみて、そのAppDelegate.swiftを引っ張ってきただけ。
それだけでいけた。