Core Dataで作成されたSQLiteファイルの場所を確認する
Core Dataで管理されている、SQLiteファイルの場所の特定方法です。
開発時、アプリをシミュレーターへ転送して実行する度にパスが変わるのでちょっと確認しづらいですよね。
方法
AppDelegate.swift内でパスをログ出力
プロジェクト作成時にCore Dataを利用するように設定すると、AppDelegate.swift内にCore Dataの基本的なコードが生成されます。
そのコード中、persistentStoreCoodinator属性に代入されるクロージャ内で変数urlにSQLiteのパスが設定されています。
まず、それをprintln()関数でログ出力します。
persistentStoreCoodinator属性を評価
しかし、persistentStoreCoodinator属性はlazy、すなわち遅延評価されます。
開発が進んだ後であれば、この属性が評価されるはずなので問題ないです。が、プロジェクトを作成してすぐの段階では、まだこの属性を評価するコードを書いていないので、クロージャが実行されません。
そのため、この属性を評価しておきます。
コード例
AppDelegate.swiftより抜粋
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("CoreDataSample.sqlite") // ===== SQLiteファイルのパスを表示する ===== println(url) // ====================================== 〜 中略 〜 return coordinator }()
ViewController.swiftより抜粋
override func viewDidLoad() { super.viewDidLoad() // ===== AppDelegateのpersistentStoreCoodinator属性を評価する ===== let coodinator = (UIApplication.sharedApplication().delegate as AppDelegate).persistentStoreCoordinator // ============================================================= }
出力例
file:///Users/User/Library/Developer/CoreSimulator/Devices/5D679BDA-E43B-406A-BB91-7B9A41002F38/data/Containers/Data/Application/1E2246CC-C713-4E69-ACBD-F043DC7C3A68/Documents/CoreDataSample.sqlite