我使用主包中的只讀核心數據源,效果很好。當我將新版本的數據庫(更多隻讀數據)添加到主包時,它仍會讀取數據庫的「舊」版本。在主包中更新只讀核心數據sqlite
任何人都可以幫助我理解當前用戶使用新版本的數據庫下載更新時爲什麼以及如何獲取新數據庫版本?
這是試圖解決在這個崗位問題的一部分:Same problem when accessing updated database from documents directory
===解決方案====
我解決了這個由「新」改變新數據庫的名稱主捆綁,它像夢一樣工作。另外,如果這是更新,我將刪除文檔目錄中的舊數據庫以進行清理。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
//===READ DATABASE FROM MAIN BUNDLE===//
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *storeUrl = [[NSBundle mainBundle] URLForResource:kNewDB withExtension:@"sqlite"];
//=== IF THE OLD DATABASE STILL EXIST DELETE IT FROM DOCUMENT DIRECTORY ===//
NSURL *oldDatabasePathURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"];
NSString *oldDatabasePath = [oldDatabasePathURL path];
if ([fileManager fileExistsAtPath:oldDatabasePath]) {
//Remove old database from Documents Directory
[fileManager removeItemAtURL:oldDatabasePathURL error:nil];
}
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSError *error;
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
return persistentStoreCoordinator;
}
您的意思是新的數據庫文件沒有複製到目標(即生成的應用程序包)? – diederikh 2012-07-15 14:21:43
我認爲這是應用程序繼續讀取舊數據庫時的問題。我想我是乾淨的目標等等。但是當我從appstore下載當前用戶時,我應該怎麼做? – PeterK 2012-07-15 16:15:31