Xcodeをチマチマと。

Xcodeビギナーによるブログです。

coredataを追加する

AppleWatch対応の新規プロジェクトを作成すると、use coredataのチェックがない。そこで、あとでcoredataをあとで追加する方法のメモ。

目標:プロジェクトにcoredataを追加する

1. xcdatamodeldファイルを追加

2. AppDelegateファイルにコードを追加

簡単!

1. xcdatamodeldファイルを追加

xcodeメニューのFile>New>File...>iOS>DataModel を選択しNextで「Model.xcdatamodeled」で追加。

2. AppDelegateファイルにコードを追加

import CoreData

と、

// MARK: - Core Data stack

    

    lazy var applicationDocumentsDirectory: NSURL = {

        let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

        return urls[urls.count-1] as NSURL

    }()

    

    lazy var managedObjectModel: NSManagedObjectModel = {

        let modelURL = Bundle.main.url(forResource: "Model", withExtension: "momd")

        return NSManagedObjectModel(contentsOf: modelURL!)!

    }()

    

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {

        var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)

        let url = self.applicationDocumentsDirectory.appendingPathComponent("Model.sqlite")

        var error: NSError? = nil

        var failureReason = "There was an error creating or loading the application's saved data."

        do {

            try coordinator!.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil)

        } catch var error1 as NSError {

            error = error1

            coordinator = nil

            abort()

        } catch {

            fatalError()

        }

        

        return coordinator

    }()

    

    lazy var managedObjectContext: NSManagedObjectContext? = {

        let coordinator = self.persistentStoreCoordinator

        if coordinator == nil {

            return nil

        }

        var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)

        managedObjectContext.persistentStoreCoordinator = coordinator

        return managedObjectContext

    }()

    // MARK: - Core Data Saving support

 

    func saveContext () {

        let context = managedObjectContext!

        if context.hasChanges {

            do {

                try context.save()

            } catch {

                let nserror = error as NSError

                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")

            }

        }

    }

を追加する。

あとは、いつも通りxcoredatamodeldファイルを編集していく。