2013-12-11 118 views
0

因此,我在App Store上有一個應用程序,其中包含一個包含約500條記錄的靜態數據的.sqlite文件。當應用程序首次啓動時,.sqlite文件已被複制到NSDocumentDirectory, NSUserDomainMask在現有iOS應用程序中更新sqlite數據庫

我打算爲我的應用程序發佈更新,並簡單地將約9個新記錄添加到現有數據庫(無結構更改)。

我努力找到一個合適的方法來爲未成年更新做到這一點,但不能... 以下鏈接:Update/Insert content into an existing Sqlite db on an iPhone app update,說明了將開發的DB和對檢查存儲應用版本的機制它決定是否更新或不...

欣賞任何想法/如何做到這一點的援助!提前致謝!

+3

首先,要明確:是您的DB核心數據或SQLite的?是的,Core Data使用SQLite,但它們不是一回事。其次(如果SQLite),你的DB文件在哪裏。在包中是隻讀的,還是被複制到讀寫存儲。如果在捆綁中,只需運送一個新的數據庫。如果在讀寫存儲中,檢測到您剛剛安裝了新版本並且比如說從包中的文件複製新記錄是一件簡單的事情。有十幾種不同的方式來確定你是否剛剛安裝了新版本。 –

+0

道歉的混亂。我已經更新上面。基本上它是SQLite。它位於Documents目錄中...感謝您的幫助! – rkh

+2

假設您現有的「第一次」邏輯將檢測到數據庫已經存在並且沒有覆蓋它。所以你只需要以某種方式檢測數據庫沒有被更新,或者通過檢查更新記錄之一或者通過檢查例如文檔中的標記文件來檢查。接下來,從包中的文件讀取記錄並將記錄插入到數據庫中。然後創建標記文件或其他。試着設計它,如果它在中間失敗,它可以重新執行而不會堵塞事情。 –

回答

1

爲熱舔說,把這個代碼數據庫被初始化後:

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]; 
} 
+0

和HotLicks,我很抱歉:我使用的應用程序是舊的,我正在查看比我提交的應用程序更早的本地版本的應用程序。看來在那個時候,我最終提交了使用CoreData的那個...我在這裏轉貼了我的問題:http://stackoverflow.com/questions/20533014/coredata-sqlite-adding-records-in-an-應用更新 – rkh

+0

錯誤類型:「setCurrentVersionLaunch」應爲「setCurrentVersionLaunched」 –

相關問題