2016-05-17 4 views
0

私のiOSアプリケーションには、郵便番号と地理位置情報を持つ都市のリストを含む.sqliteデータベースが埋め込まれています。コアデータ:バンドルデータベースで永続ストアを初期化する

- (void)initializeCoreData { 
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"cities" withExtension:@"momd"]; 
NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
NSAssert(mom != nil, @"Error initializing Managed Object Model"); 

NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
[moc setPersistentStoreCoordinator:psc]; 
[self setManagedObjectContext:moc]; 
NSURL *storeURL = [[NSBundle mainBundle] URLForResource:@"cities" withExtension:@"sqlite"]; 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
    NSError *error = nil; 
    NSPersistentStoreCoordinator *psc = [[self managedObjectContext] persistentStoreCoordinator]; 
    NSDictionary * options = @{NSSQLitePragmasOption:@{@"journal_mode":@"DELETE"}}; 
    NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]; 
    NSAssert(store != nil, @"Error initializing PSC: %@\n%@", [error localizedDescription], [error userInfo]); 
}); 

}

をあなたが見ることができるように、私は、アプリケーションディレクトリにデータベースをコピーしますが、アプリケーションバンドルから直接それを読んでいない:私は私のコアデータは次のようにスタック初期化

私はこのデータベースを読んでいるだけなので、コアデータを初期化するのは安全ですか?またはアプリケーションディレクトリにデータベースをコピーする必要がありますか?

答えて

0

はい、それは安全ですが、あなたは潜在的なミスから身を守ることができるように私も「読み取り専用」オプションを追加します。

NSMutableDictionary *options = [NSMutableDictionary dictionary]; 
options[NSReadOnlyPersistentStoreOption] = @YES; 
options[NSSQLitePragmasOption] = @{@"journal_mode":@"DELETE"}; 
関連する問題