iOS 關(guān)于本地?cái)?shù)據(jù)持久化的一些思路

狂干了一個月的項(xiàng)目,今天終于可以靜下心來好好寫一篇文章了。最近接觸到的項(xiàng)目是關(guān)于本地和云端交互的科研型項(xiàng)目,著重的技術(shù)點(diǎn)就是本地化存儲。

?那么直接進(jìn)入正題吧,聊聊我對這塊東西的理解,首先你得確定你要用的本地?cái)?shù)據(jù)庫,當(dāng)然,我推薦兩種realm和蘋果自帶的coredata,因?yàn)閞ealm我掛了vpn下了一天都沒有下好,所只能果斷拋棄奔向coredata,之前看了好多教程,準(zhǔn)備嘗嘗鮮,奈何網(wǎng)速不盡人意吶。用coredata其實(shí)用著用著也很簡單,去下一個magicrecord,他對coredata的封裝特別好,對于基本的查插刪改的操作,都是很ok的,那么接下來上點(diǎn)代碼和截圖吧,聊一下表與表之間怎么搞聯(lián)系,怎么去跟本地?cái)?shù)據(jù)搞基。


數(shù)據(jù)列表

關(guān)于magicalrecord的操作手法,大家簡書上搜索一下就可以了,反正我自己也是這么搜的,但是實(shí)際操作的時候有一點(diǎn)要提醒一下大家,[[NSManagedObjectContextMR_defaultContext]MR_saveToPersistentStoreAndWait];這句代碼一定要在你們操作完數(shù)據(jù)庫的時候?qū)懸幌?,我換了別的語句好像并沒有什么作用,如圖上面是三張表,我不高興去建立什么relationsh或者pointer,所以每一個表中都用id來去標(biāo)識她,這樣你們?nèi)?shù)的時候根據(jù)id來拿,或者命名的時候,也可以根據(jù)id來擴(kuò)展。因?yàn)楸镜卮鎯Σ还夤馐亲侄蔚臄?shù)據(jù),還有一個大頭就是圖片的存儲。

? 那么這里我選擇的是egocache的緩存框架,具體用法大家自行搜索一下就可以了,類似蘋果自帶的nsuerdefault的用法,字典那樣的,然后你清楚數(shù)據(jù)的時候,一行代碼就可以搞定了。對object命名的時候也可以根據(jù)每一個唯一的id標(biāo)識來進(jìn)行擴(kuò)展命名,方便你對數(shù)據(jù)庫的操作。

最關(guān)鍵的東西就是,如何疏通本地-服務(wù)器雙向交互服務(wù),我這里提一下我這兒的思路,用戶每次點(diǎn)擊保存的時候,先判斷網(wǎng)絡(luò)狀態(tài),無網(wǎng)當(dāng)然是直接本地保存,有網(wǎng)的話,是先本地保存?zhèn)浞?,然后服?wù)器那兒去傳,用異步去做,不然數(shù)據(jù)量大的話,會卡死。本地保存的邏輯我有這么一個思路,能先刪除再保存的千萬不要去直接更新,因?yàn)橹疤岬竭^那個串聯(lián)所有本地?cái)?shù)據(jù)的id標(biāo)識,可以根據(jù)那個id先刪再保存,跟服務(wù)器交互的時候,記得要用多線程技術(shù),因?yàn)樯婕暗降慕涌诓恢挂粋€,小數(shù)據(jù)的接口先來,然后大數(shù)據(jù)的跟上,做一個加載動畫就可以了。感覺講的還是不夠到位,因?yàn)轫?xiàng)目不能拿出來一點(diǎn)點(diǎn)剖析,感興趣的同學(xué),可以加我私聊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容