最初の起動時にアプリに CoreData を事前設定するために、Web サービスからダウンロードしたデータ (画像を含む) からアプリによって以前に作成された PreModel.sqlite ファイルを含めました。
モデルを作成するには、次のようにします。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSLog(@"creating new store");
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"PreModel.sqlite"];
if(![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {
NSString *sqlitePath = [[NSBundle mainBundle] pathForResource:@"PreModel" ofType:@"sqlite"];
if (sqlitePath) {
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtPath:sqlitePath toPath:[storeURL path] error:&error];
if (error) {
NSLog(@"Error copying sqlite database: %@", [error localizedDescription]);
}
}
}
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
うまくいくようです。しかし、私は2つの質問があります:
- sqlite ファイルが単なるデータベース ファイルであり、実際には画像が含まれていない場合、アプリは最初の起動時にどのように画像を見つけて読み込むのでしょうか?
- その後のアプリの実行でも、毎回「新しいストアの作成」がログに記録されます。なぜ
_persistentStoreCoordinator
常に nil なのですか? コードで明確に設定しています。