在NSUserDefaults中存储一组UIViews

时间:2012-10-26 22:23:17

标签: ios arrays uiview store nsuserdefaults

我正在尝试向NSDefault添加一组uiviews,但它似乎没有保留数组。有人知道为什么吗?我还尝试将每个视图存储在nsvalue中,然后将其存储在nsdefault中,但仍无法正常工作。

NSArray *arr = [[NSArray alloc] initWithObjects:[NSValue valueWithNonretainedObject:myView], nil]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:arr forKey:@"myKey"];

NSArray *resultArray = [defaults objectForKey:@"myKey"];

并且resultArray是nil!

由于

我之所以这样做是因为这些是我的uitableview的标题视图。由于创建它们需要时间,我只想创建它们一次并存储它们以供将来访问。

3 个答案:

答案 0 :(得分:3)

来自NSUserDefaults的文档:

  

NSUserDefaults类提供了访问常用类型(如浮点数,双精度数,整数,布尔值和URL)的便捷方法。默认对象必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例。有关更多详细信息,请参阅“首选项和设置编程指南”。

如果你想在NSUserDefaults中放置一个UIView(为什么?),你需要先将它存档到NSData对象中。

但你需要问问自己为什么要在NSUserDefaults中放置一个视图。您应该只在NSUserDefaults中放置一些数据。视图显示数据。一旦掌握了数据,就可以轻松重新显示视图。考虑在NSUserDefaults中放置一些所需的数据。

答案 1 :(得分:2)

你确定要这样做吗?最好将一组模型存储到数据库或某个文件中,并在需要时从它们重新创建视图。

答案 2 :(得分:1)

哈哈!你不是第一个面对这个问题的人。我自己没有遇到过这种类型的问题,但在下面的链接中,是一个包含代码的博客,可以让您缓存并重新使用您的视图。然后,您只需要在启动时重新创建视图。示例代码:

Cache UIViews for re-use in tableview