歸檔




// Dog.h
#import <Foundation/Foundation.h>

@interface Dog : NSObject<NSCoding>

/** 名稱 */
@property (nonatomic ,strong) NSString *name;

/** 體重 */
@property (nonatomic ,strong) NSString *weight;


@end

// Dog.m
#import "Dog.h"


@implementation Dog

// 歸檔哪些屬性
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.weight forKey:@"weight"];
}

// 解檔哪些屬性
// 當(dāng)解析一個文件的時候就會調(diào)用
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{

    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.weight = [aDecoder decodeObjectForKey:@"weight"];
    }
    return self;
}

@end

// Person.h
#import <Foundation/Foundation.h>

@class Dog;
@interface Person : NSObject<NSCoding>

/** 姓名 */
@property (nonatomic ,strong) NSString *name;
/** 年齡 */
@property (nonatomic, assign) NSInteger age;
/** 狗 */
@property (nonatomic ,strong) Dog *dog;

@end

// Person.m
#import "Person.h"

@implementation Person

//歸檔哪些屬性.
-(void)encodeWithCoder:(NSCoder *)aCoder {

    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeObject:self.dog forKey:@"dog"];
}


//解檔哪些屬性
//當(dāng)解析一個文件的時候就會調(diào)用.
-(instancetype)initWithCoder:(NSCoder *)aDecoder {

    if (self = [super init]) {
      self.name =   [aDecoder  decodeObjectForKey:@"name"];
      self.age =   [aDecoder decodeIntegerForKey:@"age"];
      self.dog = [aDecoder decodeObjectForKey:@"dog"];
    }
    return self;
}

@end

// ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end


// ViewController.m
#import "ViewController.h"
#import "Person.h"
#import "Dog.h"
@interface ViewController ()

@end

@implementation ViewController

- (IBAction)save:(id)sender {

    Person *per =  [[Person alloc] init];
    per.name = @"xmg";
    per.age = 10;

    Dog *dog = [[Dog alloc] init];
    dog.name = @"ww";
    per.dog = dog;

    //獲取目錄
    NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    //拼接路徑
    NSString *filePath = [path stringByAppendingPathComponent:@"person.data"];

    //歸檔
    //archiveRootObject底層會調(diào)用encodeWithCoder
    //就是要告訴它歸檔哪些屬性.
    [NSKeyedArchiver archiveRootObject:per toFile:filePath];
}
- (IBAction)read:(id)sender {

    //獲取目錄
    NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    //拼接路徑
    NSString *filePath = [path stringByAppendingPathComponent:@"person.data"];

    //解檔unarchiveObjectWithFile會調(diào)用initWithCoder
    //獲取當(dāng)前這個對象的哪些屬性.
    Person *per =  [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    NSLog(@"%@",per.name);
    NSLog(@"%ld",per.age);
    NSLog(@"%@",per.dog.name);
    NSLog(@"%@", per.dog.weight);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"%@", NSHomeDirectory());
}

@end

  • initWithCoder:淺析

// VCView.h
#import <UIKit/UIKit.h>

@interface VCView : UIView

@end

// VCView.m
#import "VCView.h"

@interface VCView()


@property (weak, nonatomic) IBOutlet UIButton *btn;

@end


@implementation VCView

// 從nib文件當(dāng)中加載完畢時調(diào)用 2
-(void)awakeFromNib {
    [super awakeFromNib];
    NSLog(@"%@",self.btn);
}

// 解析文件時會調(diào)用 1
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    
    if (self = [super initWithCoder:aDecoder]) { // UIView遵守了<NSCoding>協(xié)議厌丑,所以這里用了initWithCoder
        NSLog(@"===%@",self.btn);
    }
    
    return self;
}

@end




// XCFMyInfo.h
//  XCFAuthorDetail : @interface XCFAuthorDetail : NSObject <NSCoding>

#import <Foundation/Foundation.h>
@class XCFAuthorDetail;

@interface XCFMyInfo : NSObject

/**
 *  @return 快速獲取XCFAuthorDetail對象
 */
+ (XCFAuthorDetail *)info;

/**
 *  更新最新值
 *
 *  @param info 傳入的最新的對象
 */
+ (void)updateInfoWithNewInfo : (XCFAuthorDetail *)info;
@end

// XCFMyInfo.m
#import "XCFMyInfo.h"
#import "XCFAuthorDetail.h"

@implementation XCFMyInfo

static XCFAuthorDetail *_myInfo;
static NSString *const kMyInfo = @"myInfo";

+ (XCFAuthorDetail *)info
{
    // 從偏好設(shè)置中取數(shù)據(jù)
    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kMyInfo];
    // 解檔 另外一種方式[NSKeyedUnarchiver unarchiveObjectWithFile:]
    _myInfo = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    // 判斷
    if (_myInfo == nil) {
        _myInfo = [[XCFAuthorDetail alloc] init];
        _myInfo.type        = XCFAuthorTypeMe;
        _myInfo.nfollow     = @"1";
        _myInfo.nfollowed   = @"99999";
        _myInfo.create_time = @"1970-01-01 13:10:10";
        _myInfo.ndishes     = @"520";
        _myInfo.nrecipes    = @"1314";
    }
    return _myInfo;
}

+ (void)updateInfoWithNewInfo : (XCFAuthorDetail *)info
{
    // 歸檔
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:info];
    // 存到偏好設(shè)置中
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:kMyInfo];
    // 立即寫入
    [[NSUserDefaults standardUserDefaults] synchronize];
}
@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖吊骤,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡懦铺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門趴生,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阀趴,“玉大人,你說我怎么就攤上這事苍匆×跫保” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵浸踩,是天一觀的道長叔汁。 經(jīng)常有香客問我,道長检碗,這世上最難降的妖魔是什么据块? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮折剃,結(jié)果婚禮上另假,老公的妹妹穿的比我還像新娘。我一直安慰自己怕犁,他們只是感情好边篮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布己莺。 她就那樣靜靜地躺著,像睡著了一般戈轿。 火紅的嫁衣襯著肌膚如雪凌受。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天思杯,我揣著相機(jī)與錄音胜蛉,去河邊找鬼。 笑死色乾,一個胖子當(dāng)著我的面吹牛誊册,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杈湾,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼解虱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漆撞?” 一聲冷哼從身側(cè)響起殴泰,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浮驳,沒想到半個月后悍汛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡至会,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年离咐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奉件。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡宵蛀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出县貌,到底是詐尸還是另有隱情术陶,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布煤痕,位于F島的核電站梧宫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏摆碉。R本人自食惡果不足惜塘匣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巷帝。 院中可真熱鬧忌卤,春花似錦、人聲如沸楞泼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽现拒。三九已至辣垒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間印蔬,已是汗流浹背勋桶。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侥猬,地道東北人例驹。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像退唠,于是被迫代替她去往敵國和親鹃锈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容