2012-06-30 63 views
0

我有一個應用程序正在使用一個具有大約3.000條記錄的非常大的數據庫。以前,我在第一次啓動應用程序時加載了數據庫,但是現在我正在實施預填充數據庫以節省時間。更新包含預填充數據庫的應用程序

我的問題是,當從appstore更新應用程序到設備時會發生什麼情況,應用程序是否知道有數據庫的更新版本並加載新數據庫或繼續使用已激活的數據庫應用程序?

我使用我的應用程序的代碼使用預填充核心數據DB:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 
    if (persistentStoreCoordinator != nil) { 
    return persistentStoreCoordinator; 
} 

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"database.sqlite"]; 

/* 
Set up the store. 
For the sake of illustration, provide a pre-populated default store. 
*/ 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
// If the expected store doesn't exist, copy the default store. 
if (![fileManager fileExistsAtPath:storePath]) { 
    NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]; 
    if (defaultStorePath) { 
     [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
    } 
} 

NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 

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; 

}

+0

如果您的Core Data數據庫結構發生了變化,您可能需要調查Core Data輕量級遷移。否則,您的應用程序如何處理現有的數據庫完全在您的控制之下。 –

回答

2

假設您目前在應用商店中的應用是版本1.0。這款應用首次發佈時下載了一個數據庫。 現在,您將發佈一個新的1.1版本,它將在應用程序本身中捆綁數據庫。

當現有應用程序(1.0)的用戶將升級到1.1時,會發生什麼情況完全在您的控制之下。事實上,1.1版可以在首次啓動時檢查數據庫是否存在於1.0版安裝它的用戶目錄中。如果它在那裏,那麼1.1版知道它應該通過從資源目錄複製數據庫來升級數據庫。

實際上,在任何情況下都必須將數據庫複製到用戶目錄,因此通過檢查可以確保沒有用戶數據將被清除。

通常,您可能會在NSUserDefaults中存儲一個版本號,以便每個未來版本的應用程序都有一種方法來知道它是否是新安裝的升級版本(如果版本號存在,那麼它是從該特定版本升級,否則它是新安裝)。

0

當你更新的應用,已經創建的文件依然存在,所以舊版本的應用仍然會使用您在舊版本中創建的舊數據庫

+0

嗯,那是我害怕,任何提示如何解決? – PeterK

相關問題