數據持久化,也就是把數據保存到磁碟,以後可以再讀取出來使用(也可以再次更改或刪除)。很多場景需要數據持久化,比如為了減輕伺服器的訪問與存儲壓力,客戶端需要在本地做一些數據持久化的工作。iOS的數據持久化,有幾種方式,包括:自定義格式的文件、plistCoreData、FMDB等等。這裡記錄基於Cor... ...
數據持久化,也就是把數據保存到磁碟,以後可以再讀取出來使用(也可以再次更改或刪除)。很多場景需要數據持久化,比如為了減輕伺服器的訪問與存儲壓力,客戶端需要在本地做一些數據持久化的工作。
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搜索“覓知音”或“天涯何處”,下載安裝。