2016-05-17 9 views
0

Meine iOS App bettete eine .sqlite Datenbank mit einer Liste von Städten mit Postleitzahlen und Geolokationsinformationen.Core Data: Initialisiere Persisent Store mit einer gebündelten Datenbank

ich initialisieren meine Kerndaten wie folgt stapeln:

- (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]); 
}); 

}

Wie Sie sehen können, ich die Datenbank auf das Anwendungsverzeichnis nicht kopieren, sondern direkt aus dem Anwendungspaket lesen .

Ich muss diese Datenbank nur lesen, also ist es sicher, Core-Daten wie ich zu initialisieren, oder sollte ich die Datenbank vorher in das Anwendungsverzeichnis kopieren?

Antwort

0

Ja, es ist sicher, aber ich würde auch die „read-only“ Option hinzufügen, so dass Sie sich vor möglichen Fehlern schützen können:

NSMutableDictionary *options = [NSMutableDictionary dictionary]; 
options[NSReadOnlyPersistentStoreOption] = @YES; 
options[NSSQLitePragmasOption] = @{@"journal_mode":@"DELETE"};