对象 文件的读写

//自定义对象需要 协议 < NSCoding >
并实现

/**
 *  当一个对象要归档进沙盒中时,就会调用这个方法
 *  目的:在这个方法中说明这个对象的哪些属性要存进沙盒
 */
- (void)encodeWithCoder:(NSCoder *)encoder

/**
 *  当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法
 *  目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
 */
- (id)initWithCoder:(NSCoder *)decoder

// 自定义对象的存储必须用NSKeyedArchiver 和NSKeyedUnarchiver

//写入文件  NSKeyedArchiver
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
//从文件中读取  NSKeyedUnarchiver
+ (id)unarchiveObjectWithFile:(NSString *)path;

例子

/**
 *  当一个对象要归档进沙盒中时,就会调用这个方法
 *  目的:在这个方法中说明这个对象的哪些属性要存进沙盒
 */
- (void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:self.access_token forKey:@"access_token"];
    [encoder encodeObject:self.expires_in forKey:@"expires_in"];
    [encoder encodeObject:self.uid forKey:@"uid"];
    [encoder encodeObject:self.created_time forKey:@"created_time"];
    [encoder encodeObject:self.name forKey:@"name"];
}

/**
 *  当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法
 *  目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
 */
- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super init]) {
        self.access_token = [decoder decodeObjectForKey:@"access_token"];
        self.expires_in = [decoder decodeObjectForKey:@"expires_in"];
        self.uid = [decoder decodeObjectForKey:@"uid"];
        self.created_time = [decoder decodeObjectForKey:@"created_time"];
        self.name = [decoder decodeObjectForKey:@"name"];
    }
    return self;
}
/**
 *  存储账号信息
 *
 *  @param account 账号模型
 */
+ (void)saveAccount:(HWAccount *)account
{
    // 自定义对象的存储必须用NSKeyedArchiver,不再有什么writeToFile方法
    [NSKeyedArchiver archiveRootObject:account toFile:HWAccountPath];
}


/**
 *  返回账号信息
 *
 *  @return 账号模型
 */
+ (HWAccount *)account
{
    return [NSKeyedUnarchiver unarchiveObjectWithFile:HWAccountPath];;
}

猜你喜欢

转载自blog.csdn.net/wu745187355/article/details/45966317