CoreDataに簡単に初期データを追加する

NTYPopulatorというライブラリで簡単に初期データを追加できる。CocoaPodsからインストールできる。

pod "NTYPopulator"
$ pod install

使い方はAppDelegate.mに一行加えるだけ。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
	[[NTYPopulator new] run];
	return YES;
}

リソースバンドル内にあるseeds/*.csvを探しだして、ファイル名と同名のEntityにデータを追加する。例えば、seeds/user.csvのデータはUserというEntityに追加される。

デフォルトではモデルファイルとしてModel.momdが参照され、SQLiteファイルとして$(CFBundleName).sqliteが参照される。これを変更することも可能。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyModel" withExtension:@"momd"];
    NSURL *documentDirectoryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    NSURL *sqliteURL = [documentDirectoryURL URLByAppendingPathComponent:@"MySQLite.sqlite"];
    
    NTYPopulator *populator = [[NTYPopulator alloc] initWithModelURL:modelURL sqliteURL:sqliteURL];
    [populator run];
    
    return YES;
}

以上、ステマでした。


追記

NTYPopulatorで想定していたユースケースは開発時に初期データをさくっと入れたいというものなので、リリース時には作成済みのSQLiteファイルを使った方がいいと思う。