天天看點

ios app初始化和資料遷移的設計思路總體思路使用者切換賬戶的場景改進示意代碼

一般app啟動之後,都有一個初始化的過程。此外後續app更新,還需要考慮資料遷移。是以初始化和資料遷移的架構,在初期的版本就要考慮好

總結一下我們的app采取的方案:

1、在持久化的檔案夾内(比如UserDefaults或者Documents目錄),用一個字段儲存老版本号

2、在開始初始化之前,讀取老版本号,以及目前版本号

3、如果該應用是第一次加載,那麼老版本号就取不到(因為是初次加載,這個字段還沒有儲存),那麼就可以執行初始化過程;如果取到了老版本号,就不執行初始化

4、初始化完成之後,執行資料遷移。因為有老版本号和新版本号,是以可以通過對比,實作增量式的遷移

5、上述動作都完成之後,重新整理老版本号

6、下次正常啟動,就不會再初始化,也不會執行資料遷移了;如果是安裝新版本,由于目前版本号重新整理,又會觸發資料遷移

上面說的是比較簡單的場景。如果應用允許多使用者切換賬号,而且不同使用者的資料是分離的,就更複雜一些

首先辨別老版本号的字段不能儲存在UserDefaults裡,因為UserDefaults是使用者共享的。這樣當A使用者初始化之後,老版本号就存在了。切換到B使用者,發現老版本号已存在,則不會執行初始化,其實這時候B使用者的資料檔案還沒有建立好。是以需要把老版本号存在單獨的地方,比如每個使用者各自的sqlite檔案中

然後,讀取老版本号的時候,也要根據使用者的獨立辨別去查詢

目前暫時是把老版本号儲存在sqlite裡,但是這樣首次讀取的時候,判斷邏輯比較麻煩。需要判斷sqlite檔案是否存在,然後要判斷table有沒有,最後才能取值。如果用文本儲存可能會稍微友善一點,比存在sqlite裡,少了一個判斷table是否存在的步驟

然後,是否進行初始化的判斷:

增量遷移: