CoreDataを用いたiOSアプリでsqliteファイルをpreloadする(swift版)
やりたいこと
アプリが立ち上がってからcsvやplistからデータをロードしてCoreDataのsqliteファイルにデータを入れるのではなく、あらかじめ別に作っておいたsqliteファイルからロードしたい。お料理番組の「20分煮込んだ状態がこちらです」的に。
環境
xcode6 beta7
MacOS 10.9
iOS 7.1.3
MagicalRecord
できあがりコード
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. let fileManager = NSFileManager.defaultManager() // file URL to preload let preloadSQLiteURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(“myData", ofType: "sqlite")!) // file URL to default sqlite file let storeSQLiteURL = NSPersistentStore.MR_urlForStoreName("myData.sqlite") var err:NSError? = NSError() if fileManager.fileExistsAtPath(storeSQLiteURL.path!) { // if default sqlite file already exists, delete it. fileManager.removeItemAtURL(storeSQLiteURL, error: &err) } // copy preload sqlite file. fileManager.copyItemAtURL(preloadSQLiteURL, toURL: storeSQLiteURL, error:&err) // initialize MagicalRecord with preloaded sqlite file MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreNamed("myData.sqlite") return true }
はまりポイント
fileが既に存在すると copyItemAtURL が失敗するなんてわかんねーよ…
結局CSV読ませてsqliteファイル作成するためだけのprojectも別に作っちゃったよ…
iOSシミュレータでやったらsqliteファイルがfinderから拾えるっていろんな人が言ってるけど出てこないよ…
仕方なくsqliteファイル作るだけのprojectでitunesファイル同期させて強引に取り出したよ…
参考文献
MagicalRecordでSQLite初期データをコピーする













