Ios 使用NSKeyedArchiver将NSCache写入磁盘
我需要一个字典来保存有限数量的需要通过internet连接创建的对象,并缓存它们,以便在没有internet连接时它们仍然可用Ios 使用NSKeyedArchiver将NSCache写入磁盘,ios,objective-c,cocoa-touch,nscoding,nscache,Ios,Objective C,Cocoa Touch,Nscoding,Nscache,我需要一个字典来保存有限数量的需要通过internet连接创建的对象,并缓存它们,以便在没有internet连接时它们仍然可用 NSCache似乎很理想,因为我可以指定一个限制,或者它会根据可用内存自动调整,但我无法将对象保存到NSUserDefaults。如果我尝试这样的缓存,这对NSDictionary有效: + (void)cacheUsers:(NSCache *)users { NSData *data = [NSKeyedArchiver archivedDataWithRo
NSCache
似乎很理想,因为我可以指定一个限制,或者它会根据可用内存自动调整,但我无法将对象保存到NSUserDefaults
。如果我尝试这样的缓存,这对NSDictionary
有效:
+ (void)cacheUsers:(NSCache *)users {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:users];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kCacheID];
}
应用程序崩溃:[NSCache encodeWithCoder:]:无法识别的选择器发送到实例
是否应该在缓存之前将
NSCache
转换为NSDictionary
,然后在检索时再次转换?或者是否有更好的方法保存NSCache
?我假设您正在尝试使用自定义类对象保存数组,
为此,您需要在自定义类中实现名为“encodeWithCoder”的方法,以便将其保存为NSUserDefault
对我来说,你不需要使用NSCache
请参阅下面的相关答案:
祝你好运 我假设您正在尝试使用自定义类对象保存数组, 为此,您需要在自定义类中实现名为“encodeWithCoder”的方法,以便将其保存为NSUserDefault 对我来说,你不需要使用NSCache 请参阅下面的相关答案:
祝你好运 为什么不保存一个带有自定义对象的数组,而不是一个带有NSCache的数组。可能会加载无限多的用户,所以我需要能够在内存紧张时释放一些用户。另外,NSCache不是数组,这是一个字典,我的意思是将带有自定义对象的数组保存到NSUserDefault。哦,我的代码中有一个拼写错误,使它看起来像一个数组。很抱歉给你带来了困惑。我已经更新了为什么不使用自定义对象保存数组,而不是使用NSCache保存数组。可能会加载无限多的用户,因此我需要能够在内存紧张时释放一些用户。此外,NSCache不是数组,这是一个字典,我的意思是将带有自定义对象的数组保存到NSUserDefault。哦,我的代码中有一个拼写错误,使它看起来像一个数组。很抱歉给你带来了困惑。我已经更新了NSCache,但它没有实现NSCoding,因此您无法对其进行存档。另外,我想知道您计划如何将缓存转换为字典?NSCache没有用于迭代内容的API…是的,这将是我的下一个问题。我想我必须扩展NSMutableDictionary,使其与NSCache基本相同。。。好的,应用你到底想要达到什么?我明白了。在这种情况下,您确实需要编写自己的对象存储库,以明确定义的方式丢弃项目并支持归档。IMO-NSCache不适合这样做(即使你可以将其存档),因为苹果对其驱逐政策没有任何保证。例如,在iOS上,当应用程序转到后台时,所有NSCache都会被清除。NSCache没有实现NSCoding,因此您无法对其进行存档。此外,我想知道您计划如何将缓存转换为字典?NSCache没有用于迭代内容的API…是的,这将是我的下一个问题。我想我必须扩展NSMutableDictionary,使其与NSCache基本相同。。。好的,应用你到底想要达到什么?我明白了。在这种情况下,您确实需要编写自己的对象存储库,以明确定义的方式丢弃项目并支持归档。IMO-NSCache不适合这样做(即使你可以将其存档),因为苹果对其驱逐政策没有任何保证。例如,在iOS上,当应用程序转到后台时,所有NSCache都被清除。