Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSKeyedArchiver将NSCache写入磁盘_Ios_Objective C_Cocoa Touch_Nscoding_Nscache - Fatal编程技术网

Ios 使用NSKeyedArchiver将NSCache写入磁盘

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

我需要一个字典来保存有限数量的需要通过internet连接创建的对象,并缓存它们,以便在没有internet连接时它们仍然可用

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都被清除。