複雜物件的本地持久化

2021-07-12 07:50:47 字數 1903 閱讀 3647

這裡以person類物件為例 先建立乙個person類

person.h

@inte***ce

person : nsobject

// 注意一定要遵循nscoding協議

///姓名

@property (nonatomic, copy) nsstring *name;

///性別

@property (nonatomic, copy) nsstring *gender;

///年齡

@property (nonatomic, assign) nsinteger age;

@end

person.m

@implementation

person

//歸檔

//將所有的屬性歸檔

- (void)encodewithcoder:(nscoder *)acoder

//解檔(反歸檔)

- (instancetype)initwithcoder:(nscoder *)adecoder

return

self;

}@end

準備好以後進行具體操作:

//1.找尋documents資料夾的目錄

nsstring *documentpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) objectatindex:0];

//2. 建立person物件

person *person = [[person alloc] init];

person.name = @"mbboy";

person.gender = @"男";

person.age = 18;

//3 把這個複雜物件歸檔

建立nsmutabledata 用於建立歸檔工具的

nsmutabledata *data = [nsmutabledata data];

建立歸檔工具

nskeyedarchiver *archiver = [[nskeyedarchiver alloc] initforwritingwithmutabledata:data];

對要歸檔的person物件進行歸檔

[archiver encodeobject:person forkey:@"person"];

結束歸檔

[archiver finishencoding];

//nslog(@"==data = %@==",data);

//4 將歸檔的內容nsmutabledata儲存在本地

[data writetofile:personpath atomically:yes];

nslog(@"%@", personpath);

//1 將要解檔的資料找出

nsdata *resultdata = [nsdata datawithcontentsoffile:personpath];

//2 建立解檔工具

nskeyedunarchiver *unarchiver = [[nskeyedunarchiver alloc] initforreadingwithdata:resultdata];

//3 對person物件進行解檔

person * newperson = [unarchiver decodeobjectforkey:@"person"];

//4 結束解檔

[unarchiver finishdecoding];

nslog(@"person = %@", newperson);

解檔就相當於把資料從本地取出

ios資料初級持久化 儲存複雜物件

1.如何建立資料夾 管理資料夾 需要使用 nsfilemanager 這個單例類 withintermediatedirectories 如果填yes,如果建立的檔案已經存在,可以將其覆蓋,反之檔案建立失敗 bool iscreated nsfilemanager defaultmanager cr...

物件持久化

物件持久化 ifname main read scores pickle 將字典表序列化成字串pickle.dumps 字串變回字典用pickle.loads s import pickle person s pickle.dumps person 序列化 p pickle.loads s 恢復 序...

持久化物件的狀態

站在持久化的角度 hibernate 把物件分為 4種狀態 1 持久化狀態,2 臨時狀態,3 游離狀態,4 刪除狀態.session 的特定方法能使物件從乙個狀態轉換到另乙個狀態.臨時物件 transient 在使用 主鍵的情況下 oid 通常為 null 不處於 session 的快取中 在資料庫...