2012-03-24 68 views

回答

3

您可以設置NSUserDefaults一個布爾值 - NSUserDefaults當用戶刪除應用僅重置,讓你有一些代碼,如果一個特定的布爾值未在用戶默認發現,執行(然後在執行後保存該值以防止它再次運行)。這將覆蓋你的普通'運行代碼一次安裝'的情況 - 你可以通過類似的方法實現相同的更新,但利用CFBundleVersion變量(對於你的應用程序的每個版本都會有所不同)。

1

首先,您可能不想考慮在升級過程中執行某些操作,因爲這是不可能的。像@lxt建議的那樣,你可以在首選項中存儲一個值來表示數據庫版本,但它可能不是防彈的。

解決此問題的常用方法是使用自建的元數據。當您首次創建數據庫時,應該創建一個名爲"metadata""properties"的額外表格,其中包含兩個varchar列"name""value"。您插入一行,("database_ver", "1")

在您的數據庫層(或適配器)類中,您創建了一個「打開」方法來處理打開。在此方法中,您首先運行select database_ver from metadata;來檢查數據庫版本。如果沒有提取任何內容,則運行表創建腳本,並插入database_ver = 1行。

稍後如果您升級了表格格式,請爲每個版本提供alter table語句,然後根據database_ver運行它們。對於升級後的安裝,您可以使用更新後的create table語句,然後直接將"database_ver"設置爲"2"(或以上),而無需通過alter table

與在首選項中存儲值相比,實際上更常見的是將其存儲在數據庫本身中。因爲即使用戶在某處備份了文件,或者跳過了某個版本,仍然可以通過元數據表來告訴數據庫的格式。

FMDB運行這樣的機制沒有問題。