使用NSKeyedArchiver将NSCache写入磁盘

时间:2016-02-17 19:34:48

标签: ios objective-c cocoa-touch nscoding nscache

我需要一个字典来保存有限数量的对象,这些对象需要通过互联网连接创建并缓存它们,以便在没有互联网连接时保持可用状态。

NSCache似乎很理想,因为我可以指定限制,或者它会根据可用内存自动调整自身,但我无法将对象保存到NSUserDefaults。如果我尝试这样的缓存,它适用于NSDictionary

+ (void)cacheUsers:(NSCache *)users {
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:users];
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:kCacheID];
}

应用崩溃:[NSCache encodeWithCoder:]: unrecognized selector sent to instance

我应该在缓存之前将NSCache转换为NSDictionary,然后在检索时再次转换吗?或者有更好的方法来保存NSCache

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试使用自定义类对象保存数组, 为此,您需要在自定义类中实现名为“encodeWithCoder”的方法,以便将其保存到NSUserDefault。

对我而言,您不需要使用NSCache。

请参阅以下相关答案: https://stackoverflow.com/a/2315972/1982185

祝你好运!