0
A
回答
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運行這樣的機制沒有問題。
相關問題
- 1. 代碼第一次創建數據庫
- 2. 從架構一次性創建MySQL數據庫
- 3. 代碼優先:數據庫僅在執行特定代碼後創建?
- 4. EF 6和sqlite代碼第一次創建數據庫?
- 5. 如何在每次構建scons後運行一些代碼?
- 6. Visual Studio代碼分析(的FxCop)只運行一次構建
- 7. PHP代碼每次運行代碼時都會創建另一行
- 8. 數據庫架構建議
- 9. 數據庫架構建議
- 10. 數據庫架構建議
- 11. 使代碼運行一次
- 12. 只運行一次javascript代碼一次
- 13. 實體框架代碼第一次使用Access數據庫
- 14. Entitiy框架數據庫服務器代碼第一次
- 15. 尋找將數據遷移到實體框架代碼的建議代碼第一次生成的數據庫
- 16. 實體框架代碼優先 - 使用MySql創建數據庫?
- 17. 實體框架5代碼優先不創建數據庫
- 18. TeamCity多部分構建 - 如何僅結算一次代碼
- 19. 代碼第一次到Oracle數據庫
- 20. 代碼第一次數據庫遷移
- 21. 僅在第一次運行時執行函數ios
- 22. Azure在代碼中創建數據庫
- 23. 代碼優先 - 不創建數據庫
- 24. 爲ios創建數據庫
- 25. 創建數據庫連接一次只
- 26. 一次創建數據庫和表?
- 27. Android sql創建數據庫一次
- 28. 爲與iOS數據及其庫綁定的iOS創建框架
- 29. 數據庫一次運行(一次運輸)
- 30. iOS數據庫架構決定