归档

来源:互联网 发布:python实例书籍 编辑:程序博客网 时间:2024/05/17 07:11

归档,就是把需要保存的对象转换成NSData,然后存在本地,等下次需要使用的时候,再解归档,然后就可以使用了

第一种方法(只能存一个,最简单)

    NSString *str =@"成本价";

    //归档

    NSData *data = [NSKeyedArchiverarchivedDataWithRootObject:str];

    //存本地

    [data writeToFile:@"/Users/qianfeng/Desktop/aaa"atomically:NO];

    //从本地读取

    data = [NSDatadataWithContentsOfFile:@"/Users/qianfeng/Desktop/aaa"];

    //拿到对象

    NSString *newStr = [NSKeyedUnarchiverunarchiveObjectWithData:data];

    NSLog(@"%@",newStr);


第二种方法(可以存多个对象)

    NSString *str1 =@"独孤求败";

    NSString *str2 = @"东方不败";

   userItem *user = [[userItem alloc] init];

    user.name = @"西方不败";

    // str1 + str2 = data

    NSMutableData *data = [NSMutableDatadata];

    //把归档的对象都放在data

    NSKeyedArchiver *archiver = [[NSKeyedArchiveralloc] initForWritingWithMutableData:data];

    [archiver encodeObject:str1 forKey:@"str1"];

    [archiver encodeObject:str2 forKey:@"str2"];

    [archiver encodeObject:user forKey:@"user"];

    [archiver finishEncoding];

    

    //拿出对象

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiveralloc] initForReadingWithData:data];

    NSString *newStr1 = [unarchiver decodeObjectForKey:@"str1"];

    NSString *newStr2 = [unarchiver decodeObjectForKey:@"str2"];

    userItem *newUser = [unarchiver decodeObjectForKey:@"user"];

    [unarchiver finishDecoding];

    NSLog(@"newStr1 is%@ , newStr2 is %@ , user is %@",newStr1,newStr2,newUser.name);


补充:

  如果想要归档自定义的类对象的时候,就需要遵守NSCoding协议,写相关的协议方法

自定义类.h

//想让自定义的类支持归档,需要添加NSCoding协议

@interface userItem :NSObject<NSCoding>

@property(nonatomic,copy)NSString *name;

@end


自定义类.m

//外界不能直接归档userItem,首先userItem先把自己的所有属性依次归档,然后外界再对userItem归档

@implementation userItem


-(id)initWithCoder:(NSCoder *)aDecoder

{

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

    return self;

}


-(void)encodeWithCoder:(NSCoder *)aCoder

{

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

}

@end


然后归档,解档过程就是上面第二种方法中代码为绿色背景的部分

0 0
原创粉丝点击