把需要保存的对象转换成NSData,然后存在本地
等下次需要使用的时候,再解归档,就可以使用了
第一种方法(存一个)
-(void)fun1
{
NSString *str = @“成本价”;
//归档
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
//存本地
[data writeToFile:@“/Users/qianfeng/Desktop/aaa” atomically:NO];
//从本地读取
data = [NSData dataWithContentsOfFile:@“/Users/qianfeng/Desktop/aaa”];
//拿到对象
NSString *newStr = [NSKeyedUnarchvier unarchiverObjectWithData:data];
NSLog(@“%@“,newStr);
}
第二种方法(存多个)
-(void)fun2
{
NSString *str1 = @“独孤求败”;
NSString *str2 = @“东方不败”;
// str1 + str2 = data
NSMutableData *data = [NSMutableData data];
//把归档的对象都放在data里
NSKeyedArchiver *archiver = [NSKeyedArchiver alloc] initForWritingMutableData:data];
[archiver encodeObject:str1 forKey:@“str1”];
[archiver encodeObject:str2 forKey:@“str2”];
[archiver finishEncoding];
//拿出对象
NSkeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSString *newStr1 = [unarchvier decodeObjectForKey:@“str1”];
NSString *newStr2 = [unarchiver decodeObjectForKey:@“str2”];
NSLog(@“%@,%@“,newStr1,newStr2);
}
第三种(存自定义类对象)
首先,自定义类.h
//想让自定义的类支持归档,需要添加NSCoding协议
@interface userItem:NSObject<NSCoding>
@property(nonatomic,copy)NSString *name;
@end
然后,自定义类.m
@implementation userItem
//外界不能直接归档userItem,首先userItem需要先把自己的所有属性依次归档,然后外界再对userItem进行归档
-(id)initWithCoder:(NSCoder *)aDecoder
{
self.name = [aDecoder decodeObjectForKey:@“name”];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@“name”];
}
@end
最后归档,解档操作和第二种方法类似
等下次需要使用的时候,再解归档,就可以使用了
第一种方法(存一个)
-(void)fun1
{
NSString *str = @“成本价”;
//归档
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
//存本地
[data writeToFile:@“/Users/qianfeng/Desktop/aaa” atomically:NO];
//从本地读取
data = [NSData dataWithContentsOfFile:@“/Users/qianfeng/Desktop/aaa”];
//拿到对象
NSString *newStr = [NSKeyedUnarchvier unarchiverObjectWithData:data];
NSLog(@“%@“,newStr);
}
第二种方法(存多个)
-(void)fun2
{
NSString *str1 = @“独孤求败”;
NSString *str2 = @“东方不败”;
// str1 + str2 = data
NSMutableData *data = [NSMutableData data];
//把归档的对象都放在data里
NSKeyedArchiver *archiver = [NSKeyedArchiver alloc] initForWritingMutableData:data];
[archiver encodeObject:str1 forKey:@“str1”];
[archiver encodeObject:str2 forKey:@“str2”];
[archiver finishEncoding];
//拿出对象
NSkeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSString *newStr1 = [unarchvier decodeObjectForKey:@“str1”];
NSString *newStr2 = [unarchiver decodeObjectForKey:@“str2”];
NSLog(@“%@,%@“,newStr1,newStr2);
}
第三种(存自定义类对象)
首先,自定义类.h
//想让自定义的类支持归档,需要添加NSCoding协议
@interface userItem:NSObject<NSCoding>
@property(nonatomic,copy)NSString *name;
@end
然后,自定义类.m
@implementation userItem
//外界不能直接归档userItem,首先userItem需要先把自己的所有属性依次归档,然后外界再对userItem进行归档
-(id)initWithCoder:(NSCoder *)aDecoder
{
self.name = [aDecoder decodeObjectForKey:@“name”];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@“name”];
}
@end
最后归档,解档操作和第二种方法类似