ibireme / YYCache

High performance cache framework for iOS.
MIT License
2.37k stars 505 forks source link

YYCache保存模型后再取出来的问题 #68

Open AbnerPei opened 8 years ago

AbnerPei commented 8 years ago

你好!今天尝试用YYCache缓存一个模型!结果取的时候模型对象指针存在,但对应属性为空?于是就去这样设置下

//SelectShop.h
@interface SelectShop : NSObject<NSCoding>
//SelectShop.m
@implementation SelectShop

-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
       self.name = [aDecoder decodeObjectForKey:@"name"];
    }
    return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
     [aCoder encodeObject:self.name forKey:@"name"];
}
@end

如上,在取的时候只有“name”属性有值,其它都为nil! 是不是模型类都要这样(如SelectShop.m里面,每个属性都归档解档)写才行??? 是不是模型类都要这样(如SelectShop.m里面,每个属性都归档解档)写才行??? 是不是模型类都要这样(如SelectShop.m里面,每个属性都归档解档)写才行??? 下面是我的存取方法

//存
 //1.用YYCache创建一个以KLCPDatabaseKey命名的数据库
    YYCache *cache = [YYCache cacheWithName:KLCPDatabaseKey];
    //2.把模型存储到数据库中
    [cache setObject:aShop forKey:KCurrentShopKey withBlock:^{
        LCPLog(@"存储当前model信息成功");
    }];
//取
//1.获取数据库
    YYCache *cache =  [YYCache cacheWithName:KLCPDatabaseKey];
    [cache objectForKey:KCurrentShopKey withBlock:^(NSString * _Nonnull key, id<NSCoding>  _Nonnull object) {
        SelectShop *aShop = (SelectShop *)object;
         LCPLog(@"从本地数据库读取数据%@----%@",aShop,aShop.name);
    }];
ibireme commented 8 years ago

是的,对象必须要自己实现完整的 NSCoding 协议。

devjiangzhou commented 7 years ago

yymodel 里面有快速序列化的方法的 @chinesemanbobo

AbnerPei commented 7 years ago

嗯嗯,后来我用runtime在模型里序列化了下。

发自网易邮箱大师 在2016年10月08日 15:27,jiangzhoubai 写道:

yymodel 里面有快速序列化的方法的 @chinesemanbobo

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.