歸檔是一種物件都可以實現的更加常規的序列化方式。適用對模型物件進行歸檔的技術可以輕鬆將複雜物件寫入檔案和從檔案中進行讀取。大多數支援儲存資料的foundation和cocos touch類都遵循nscoding協議(不過有些例外,例如uiiamge),因此對於大多數系統提供的類而言,歸檔比較輕鬆。如果是自定義的類,則需要自己實現nscoding協議的編碼和解碼方法。下面還是用上篇文章中的例子,但是換成歸檔的方式進行持久化。
1、建立資料模型
建立類bidfourlines,繼承nsobject,定義有個nsarray型別的屬性用來儲存4個文字欄位中的字串。
#import @inte***ce bidfourlines : nsobject@property (nonatomic, copy) nsarray * lines;
@end
注意我們讓它遵循了nscoding和nscopy協議,下面分別實現兩個協議中的方法。
-(id)initwithcoder:(nscoder *)adecoder
return self;
}-(void)encodewithcoder:(nscoder *)acoder
這兩個方法都傳遞了乙個nscoder型別的例項,分別用於解碼和編碼。
-(id)copywithzone:(nszone *)zone
}copy.lines = array;
return copy;
}
對於任何資料模型,實現nscopy協議都是非常有用的,通過它可以拷貝乙個完全相同的物件。在copywithzone方法中,我們建立了乙個新的例項,並為它的屬性設定相同的值。
2、實現viewcontroller
#import @inte***ce viewcontroller : uiviewcontroller
@property (nonatomic, strong) iboutletcollection(uitextfield)nsarray * linefields;
@end
#import "viewcontroller.h"
@inte***ce viewcontroller ()
@end
@implementation viewcontroller
- (void)viewdidload
{ [super viewdidload];
if ([[nsfilemanager defaultmanager] fileexistsatpath:[self getfilepath]]) {
nsmutabledata * data = [nsdata datawithcontentsoffile:[self getfilepath]];
nskeyedunarchiver * unarchiver = [[nskeyedunarchiver alloc] initforreadingwithdata:data];
nsarray * array = [unarchiver decodeobjectforkey:@"hahaha"];
[unarchiver finishdecoding];
for (int i = 0; i
當前viewcontroller展現時,首先判斷指定路徑下有無歸檔檔案,如果有,從歸檔檔案中建立data例項,並建立乙個nskeyedunarchiver進行解碼。
值得注意的時,對陣列或者字典進行歸檔時,要確保陣列或字典中的元素也同時要遵循nscoding協議,只有這樣,其中的物件才可以和陣列本身一起寫入到檔案當中,然後從檔案中讀取出來重新回到陣列或字典當中。
iOS開發歸檔儲存
ios做儲存的時候,陣列裡面放nsstring nsnumber nsdata等可以直接寫入檔案,但是我們自定義的類物件放入陣列中就不能直接寫入檔案。原因是上述的類實現了協議,該協議有兩個方法 對物件進行歸檔的時候其實就是訪問物件的屬性 進行編碼的時候會呼叫,做儲存操作的時候會呼叫這個方法 void...
iOS開發之APP USER物件儲存歸檔
void forgetpsdaction completion null 這個方法啊,頁面保證釋放 頁面迴圈跳轉,若有頁面不進行釋放的話則會導致迴圈引用 2.就忘記密碼和註冊頁面來看也就是相互之間可以跳轉到登入頁面去。3.一旦登入成功,這時候後台伺服器回返回乙個使用者的所有資訊的json或者其他型別...
iOS開發筆記之十八 歸檔Archiver(一)
在程式設計開發中,經常需要用某種格式來儲存乙個或多個物件,以便以後還原這些物件。這個過程包括將 多個 物件寫入檔案中,以便以後讀取該物件。本次筆記記錄將學習兩種歸檔資料的方法 屬性列表和帶鍵值的編碼。1 使用xml屬性列表進行歸檔 如果你的物件是nsstring nsdictionary nsarr...