【发布时间】:2016-02-17 19:34:47
【问题描述】:
我需要一个字典来保存有限数量的需要通过 Internet 连接创建的对象并缓存它们,以便在没有 Internet 连接时它们仍然可用。
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?
【问题讨论】:
-
NSCache 没有实现 NSCoding,所以不能存档。
-
另外,我想知道您打算如何将缓存转换为字典? NSCache 没有用于遍历内容的 API...
-
是的,这将是我的下一个问题。我想我必须扩展 NSMutableDictionary 以使其与 NSCache 基本相同......好吧苹果
-
你到底想达到什么目的?
-
我明白了。在这种情况下,您确实需要编写自己的对象存储库,以明确定义的方式丢弃项目并支持归档。 IMO NSCache 不适合这种情况(即使您可以将其存档),因为 Apple 对其驱逐政策不做任何保证。例如。在 iOS 上,当应用进入后台时,所有 NSCache 都会被清除。
标签: ios objective-c cocoa-touch nscoding nscache