狂干了一個月的項(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ù)搞基。

關(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é),可以加我私聊。