狂干了一個月的項目,今天終于可以靜下心來好好寫一篇文章了。最近接觸到的項目是關于本地和云端交互的科研型項目,著重的技術點就是本地化存儲。
?那么直接進入正題吧,聊聊我對這塊東西的理解,首先你得確定你要用的本地數據庫,當然,我推薦兩種realm和蘋果自帶的coredata,因為realm我掛了vpn下了一天都沒有下好,所只能果斷拋棄奔向coredata,之前看了好多教程,準備嘗嘗鮮,奈何網速不盡人意吶。用coredata其實用著用著也很簡單,去下一個magicrecord,他對coredata的封裝特別好,對于基本的查插刪改的操作,都是很ok的,那么接下來上點代碼和截圖吧,聊一下表與表之間怎么搞聯系,怎么去跟本地數據搞基。
關于magicalrecord的操作手法,大家簡書上搜索一下就可以了,反正我自己也是這么搜的,但是實際操作的時候有一點要提醒一下大家,[[NSManagedObjectContextMR_defaultContext]MR_saveToPersistentStoreAndWait];這句代碼一定要在你們操作完數據庫的時候寫一下,我換了別的語句好像并沒有什么作用,如圖上面是三張表,我不高興去建立什么relationsh或者pointer,所以每一個表中都用id來去標識她,這樣你們取數的時候根據id來拿,或者命名的時候,也可以根據id來擴展。因為本地存儲不光光是字段的數據,還有一個大頭就是圖片的存儲。
? 那么這里我選擇的是egocache的緩存框架,具體用法大家自行搜索一下就可以了,類似蘋果自帶的nsuerdefault的用法,字典那樣的,然后你清楚數據的時候,一行代碼就可以搞定了。對object命名的時候也可以根據每一個唯一的id標識來進行擴展命名,方便你對數據庫的操作。
最關鍵的東西就是,如何疏通本地-服務器雙向交互服務,我這里提一下我這兒的思路,用戶每次點擊保存的時候,先判斷網絡狀態,無網當然是直接本地保存,有網的話,是先本地保存備份,然后服務器那兒去傳,用異步去做,不然數據量大的話,會卡死。本地保存的邏輯我有這么一個思路,能先刪除再保存的千萬不要去直接更新,因為之前提到過那個串聯所有本地數據的id標識,可以根據那個id先刪再保存,跟服務器交互的時候,記得要用多線程技術,因為涉及到的接口不止一個,小數據的接口先來,然后大數據的跟上,做一個加載動畫就可以了。感覺講的還是不夠到位,因為項目不能拿出來一點點剖析,感興趣的同學,可以加我私聊。