iOS開(kāi)發(fā)中頁(yè)面數(shù)據(jù)的保存

在開(kāi)發(fā)中,通常在無(wú)網(wǎng)絡(luò)狀態(tài)時(shí),比較友好的一種處理方法是在頁(yè)面上展示一個(gè)無(wú)網(wǎng)絡(luò)的圖然后加一個(gè)刷新按鈕,

常規(guī)無(wú)網(wǎng)絡(luò)頁(yè)面

但是在一些特定的app中,這種處理方式又顯的不夠友好,比如購(gòu)物或者信息瀏覽app。這也就引申出了今天要說(shuō)的頁(yè)面數(shù)據(jù)保存。在app開(kāi)發(fā)伊始,我對(duì)無(wú)網(wǎng)絡(luò)的處理用的就是第一種方式,但是產(chǎn)品問(wèn)我,可不可以在沒(méi)有網(wǎng)絡(luò)的時(shí)候展示用戶上次刷新數(shù)據(jù)時(shí)的數(shù)據(jù),讓頁(yè)面顯得不那么空,經(jīng)過(guò)思考之后發(fā)現(xiàn),如果引入數(shù)據(jù)庫(kù),保存這種小量數(shù)據(jù),有種殺雞用牛刀的感覺(jué),但是通常使用保存用戶數(shù)據(jù)的NSUserDefaults又無(wú)法保存頁(yè)面這種復(fù)雜的數(shù)據(jù)。最后決定使用歸檔的方式進(jìn)行保存。按照這個(gè)思路:

獲取沙盒路徑:NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

創(chuàng)建模型,并遵循NSCoding協(xié)議;

獲取文件全路徑:NSString * pathName = [path stringByAppendingString:@"/Code.data"];

將模型賦好值后歸檔寫(xiě)入沙盒:[NSKeyedArchiver archiveRootObject:model toFile:pathName];

讀取數(shù)據(jù)時(shí)解檔:dataModel * model = [NSKeyedUnarchiver unarchiveObjectWithFile:pathName];

按這種操作寫(xiě)入時(shí)要先判斷當(dāng)前路徑下是否已有文件,如果有則不再寫(xiě)入。其實(shí)到這里產(chǎn)品提的需求已經(jīng)完成了,雖然過(guò)程和代碼有一點(diǎn)繁瑣,但是最終結(jié)果是想要的。過(guò)了一天之后我無(wú)意中在網(wǎng)上發(fā)現(xiàn)了一個(gè)方法,三行代碼搞定上述一切,在我猶豫了兩秒鐘之后決定:改!

先說(shuō)庫(kù):XHNetworkCache

使用時(shí)直接 #import "XHNetworkCache.h" 即可

網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ)食用方法:?

????????????????//(異步)寫(xiě)入/更新緩存數(shù)據(jù)

? ? ? ? ? ? ? ? //參數(shù)1:JSON數(shù)據(jù),參數(shù)2:數(shù)據(jù)請(qǐng)求URL,參數(shù)3:數(shù)據(jù)請(qǐng)求參數(shù)(沒(méi)有傳nil)

? ? ? ? ? ? ? ? [XHNetworkCache save_asyncJsonResponseToCacheFile:responseObject andURL:[LHHomeRequestURL productCateList] params:parameters completed:^(BOOL result) {

? ? ? ? ? ? ? ? ? ? if(result){

? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"(異步)寫(xiě)入/更新緩存數(shù)據(jù) 成功");

? ? ? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"(異步)寫(xiě)入/更新緩存數(shù)據(jù) 失敗");

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }];

讀取方法:

? ? ? ? ? ? //獲取緩存數(shù)據(jù)

? ? ? ? ? ? //參數(shù)1:數(shù)據(jù)請(qǐng)求URL,參數(shù)2:數(shù)據(jù)請(qǐng)求參數(shù)(沒(méi)有傳nil)

? ? ? ? ? ? id cacheJson = [XHNetworkCache cacheJsonWithURL:[LHHomeRequestURL productCateList] params:parameters];

數(shù)據(jù)讀取之后使用前先判斷一下cacheJson是否為空,如此簡(jiǎn)便,存取結(jié)束,內(nèi)部還有一些其他的方法可以自己下載下來(lái)研究一下,在此感謝作者的奉獻(xiàn)。

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

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