用NSKeyedArchiver儲存資料 歸檔)

2021-09-20 02:36:39 字數 2441 閱讀 3763

一、nskeyedarchiver和nsuserdefault的區別

nsuserdefault只能儲存基本資料型別,如nsinteger nsstring nsarray 但像uiimage就存不進去

將各種型別的物件儲存到檔案中,而不僅僅是字串、陣列和字典型別,有一種更靈活的方法。就是利用nskeyedaarchiver類建立帶鍵(keyed)的檔案來完成。

二、用法

所儲存的物件必須必須服從nssecurecoding協議

1、對於已經服從的型別,如nsstring、nsinteger可以直接使用

nskeyedarchiver-歸檔

//1.對需要儲存的資料進行編碼 ->nsdata *

nsdata *data = [nskeyedarchiver archiveddatawithrootobject:@"ios" requiringsecurecoding:yes error:nil];

//2.將二進位制資料儲存到檔案

//建立檔案

//建立檔案

[[nsfilemanager defaultmanager] createfileatpath:path contents:nil attributes:nil];

[data writetofile:path atomically:yes];

nskeyedunarchiver-解歸檔

//解歸檔

//獲取檔案路徑

//讀取檔案的內容

nsdata *data = [nsdata datawithcontentsoffile:path];

//將二進位制資料轉化為對應的物件型別

nsstring *str = [nskeyedunarchiver unarchivedobjectofclass:[nsstring class] fromdata:data error:nil];

nslog(@"%@", str);

2.對於其他型別,如自己建立的模型,需要服從協議,並且實現某些方法

person.h

#import ns_assume_nonnull_begin

@inte***ce person : nsobject@property (nonatomic, strong) nsstring *name;

@property (nonatomic, assign) nsinteger age;

@end

ns_assume_nonnull_end

person.m實現一些方法

#import "person.h"

@implementation person

+ (bool)supportssecurecoding

//歸檔的時候呼叫

//告訴編碼器該如何歸檔

//將這個物件哪些屬性編碼起來

- (void)encodewithcoder:(nscoder *)acoder

//解歸檔

- (instancetype)initwithcoder:(nscoder *)adecoder

return self;

}

使用

viewcontroller.m 歸檔

//建立person物件

person *jz = [person new];

jz.name = @"jz";

jz.age = 12;

//1.對需要儲存的資料進行編碼 ->nsdata *

nsdata *data = [nskeyedarchiver archiveddatawithrootobject:jz requiringsecurecoding:yes error:nil];

//2.將二進位制資料儲存到檔案

//建立檔案

//建立檔案

[[nsfilemanager defaultmanager] createfileatpath:path contents:nil attributes:nil];

[data writetofile:path atomically:yes];

解歸檔

//解歸檔

//獲取檔案路徑

//讀取檔案的內容

nsdata *data = [nsdata datawithcontentsoffile:path];

//將二進位制資料轉化為對應的物件型別

person *jz = [nskeyedunarchiver unarchivedobjectofclass:[person class] fromdata:data error:nil];

nslog(@"%@", jz);

收藏

用Margin還是用Padding

用margin還是用padding 何時應當使用margin 需要在border外側新增空白時。空白處不需要背景 色 時。上下相連的兩個盒子之間的空白,需要相互抵消時。如15px 20px的margin,將得到20px的空白。何時應當時用padding 需要在border內測新增空白時。空白處需要背...

用Margin還是用Padding

用margin還是用padding這個問題是每個學習css高階時的必經之路。css邊距屬性定義元素周圍的空間。通過使用單獨的屬性,可以對上 右 下 左的外邊距進行設定。也可以使用簡寫的外邊距屬性同時改變所有的外邊距。w3school 邊界 margin 元素周圍生成額外的空白區。空白區 通常是指其他...

用yaml寫用例

第一步 安裝yaml,在執行裡輸入 pip install pyyaml 檢驗是否安裝成功,在pycharm裡輸入 import yaml 第二步 建立乙個file,字尾寫yaml或yml 在yml檔案裡寫入單個使用者名稱和密碼 開啟yml檔案並以字典的形式列印出來 執行結果 在yml檔案裡寫入多個...