UI進階數據本地化之復雜對象本地化操作

首先創(chuàng)建Person類,繼承與NSObject 遵循<NSCoding>,并建立屬性

Person.h中:

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *sex;

@property(nonatomic,assign)NSUInteger age;

//屬性的作用

//聲明set get方法

//實現set get方法

//聲明一個以下劃線開頭命名的一個成員變量


Person.m中: 歸解檔

//歸檔

//在歸檔和解檔的時候,要把所有的屬性都進行歸解檔

-(void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.sex forKey:@"sex"];

[aCoder encodeInteger:self.age forKey:@"age"];

}

//解檔

-(instancetype)initWithCoder:(NSCoder *)aDecoder{

self=[super init];

if (self) {

self.name=[aDecoder decodeObjectForKey:@"name"];

self.sex=[aDecoder decodeObjectForKey:@"sex"];

self.age=[aDecoder decodeIntegerForKey:@"age"];

}

return self;

}


ViewController.m中


//如果一個對象想直接寫入本地,那么這個對象需要遵守NDCoding協(xié)議


NSString *documentPathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];


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


person.name = @"隊長";

person.sex = @"男";

person.age = 38;


//將復雜對象歸檔之后存入本地

//第一步:創(chuàng)建一個NSMutableData,用于初始化歸檔工具

NSMutableData *data = [NSMutableData data];

NSLog(@"data==%@",data);


//第二步 :創(chuàng)建歸檔工具

NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

NSLog(@"data1==%@",data);


//第三步:使用歸檔工具? 對需要歸檔對象進行歸檔

[keyedArchiver encodeObject:person forKey:@"person"];

NSLog(@"data2==%@",data);


//第四步:結束歸檔

[keyedArchiver finishEncoding];

NSLog(@"data3==%@",data);


NSString *dataPath = [documentPathStr stringByAppendingPathComponent:@"data.plist"];


[data writeToFile:dataPath atomically:YES];

NSLog(@"datapath==%@",documentPathStr);


#pragma mark--解檔使用


//第一步:從本地獲取到Data

NSMutableData *newdata = [NSMutableData dataWithContentsOfFile:dataPath];

NSLog(@"data==%@",newdata);


//第二步:通過獲取到的data 創(chuàng)建一個解檔工具

NSKeyedUnarchiver *keyedUnarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:newdata];


//第三步:創(chuàng)建一個person對象接收解檔結果

Person *newperson = [keyedUnarchiver decodeObjectForKey:@"person"];


//第四步:結束解檔

[keyedUnarchiver finishDecoding];

NSLog(@"person==%@",newperson.name);


//歸解檔是一種編碼方式,不是數據本地化的方式

//復雜對象寫入本地實際上使用的還是wirteToFile得簡單寫入本地的方法

//直接寫入本地 是整存整取

//在一個路徑下存數據,最后一次存進去的東西會覆蓋掉之前的

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容