1. 程式人生 > >iOS開發簡記(8):資料持久化

iOS開發簡記(8):資料持久化

資料持久化,也就是把資料儲存到磁碟,以後可以再讀取出來使用(也可以再次更改或刪除)。很多場景需要資料持久化,比如為了減輕伺服器的訪問與儲存壓力,客戶端需要在本地做一些資料持久化的工作。

iOS的資料持久化,有幾種方式,包括:自定義格式的檔案、plist、CoreData、FMDB等等。

這裡記錄基於CoreData的開源專案MagicalRecord的使用。經過封裝,magicalrecord已經不需要接觸到sql語句的編寫。

(1)安裝

小程還是使用cocoapods來安裝,只需要在Podfile中增加:

pod 'MagicalRecord'

pod 'MagicalRecord/CocoaLumberjack'

然後在Podfile所在目錄,執行命令pod install即可安裝。安裝完畢,在目標專案,可以看到magicalrecord的影子:

(2)使用

magicalrecord的讀寫操作,使用上依賴於context,相當於先在context上操作,之後才持久化(這一步不需要讀者考慮)。

context的獲取與建立有一系列的函式,其中,[NSManagedObjectContext MR_defaultContext]取得預設的context,只能使用於主執行緒;而其它context可以使用於非主執行緒,比如:[NSManagedObjectContext MR_context]。

在使用上,如果在主執行緒操作,甚至可以忽略對context的使用。

另外,需要注意,使用magicalrecord需要建立資料模型,也就是建立表的結構。

舉個例子。

小程需要一張記錄點讚的語音的id的表,只有一個欄位,存放語音的id。

先是使用magicalrecord進行資料庫的初始化與清理:

然後,建立這張點贊表的資料模型,按下面的截圖操作:


這時會生成新的資料模型的檔案,使用時import進標頭檔案,比如是這樣的一個數據模型(實體類)宣告:

注意,不知道是不是xcode10.0的問題,在編譯的時候會提示錯誤,說有兩個資料模型檔案生成同樣的.o,而除了新生成的檔案,在這個目錄還會自動生成資料模型檔案:/Users/username/Library/Developer/Xcode/DerivedData/ZhiYin-dhvbpzbqjhsnhucuczmcenxfdpqa/Build/Intermediates.noindex/ZhiYin.build/Debug-iphonesimulator/ZhiYin.build/DerivedSources/CoreDataGenerated,小程的解決辦法是,把專案中新生成的檔案移除掉(非刪除),即可編譯通過。

這裡只建立了一個實體類,也就是一張表。如果想新建表,那就增加一個Entity,指定屬性(欄位),再建立對應的實體類即可。

之後,就可以使用這個實體類來進行讀寫操作。

比如,讀取所有記錄:

比如,增加記錄:

比如,刪除記錄:

注意,對於增加、刪除或修改,都需要對context進行儲存,並且在指定的context上進行操作,比如:

本文演示的APP的原始碼:

https://github.com/crazy0363/sound-show-zhiyin

本APP已上架AppStore,歡迎您使用。地址:https://itunes.apple.com/cn/app/%E5%A4%A9%E6%B6%AF%E4%BD%95%E5%A4%84%E8%A7%85%E7%9F%A5%E9%9F%B3/id1439297254?mt=8&from=groupmessage&isappinstalled=0

或在AppStore搜尋“覓知音”或“天涯何處”,下載安裝。