爲熱舔說,把這個代碼數據庫被初始化後:
if([self isFirstLaunchInCurrentVersion]){
//query the records you want to add , if records not exist, then insert them
[self setCurrentVersionLaunch:YES];
}
2 util的方法:
- (BOOL)isFirstLaunchInCurrentVersion{
NSString * currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
return [[NSUserDefaults standardUserDefaults] boolForKey:currentVersion];
}
- (void)setCurrentVersionLaunched:(BOOL)isFirstLaunched{
NSString * currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
[[NSUserDefaults standardUserDefaults] setBool:isFirstLaunched forKey:currentVersion];
[[NSUserDefaults standardUserDefaults] synchronize];
}
首先,要明確:是您的DB核心數據或SQLite的?是的,Core Data使用SQLite,但它們不是一回事。其次(如果SQLite),你的DB文件在哪裏。在包中是隻讀的,還是被複制到讀寫存儲。如果在捆綁中,只需運送一個新的數據庫。如果在讀寫存儲中,檢測到您剛剛安裝了新版本並且比如說從包中的文件複製新記錄是一件簡單的事情。有十幾種不同的方式來確定你是否剛剛安裝了新版本。 –
道歉的混亂。我已經更新上面。基本上它是SQLite。它位於Documents目錄中...感謝您的幫助! – rkh
假設您現有的「第一次」邏輯將檢測到數據庫已經存在並且沒有覆蓋它。所以你只需要以某種方式檢測數據庫沒有被更新,或者通過檢查更新記錄之一或者通過檢查例如文檔中的標記文件來檢查。接下來,從包中的文件讀取記錄並將記錄插入到數據庫中。然後創建標記文件或其他。試着設計它,如果它在中間失敗,它可以重新執行而不會堵塞事情。 –