0

我正在尝试向 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"];

结果数组为零!

谢谢

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

4

3 回答 3

3

来自 NSUserDefaults 的文档:

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

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

但是你需要问自己为什么要在 NSUserDefaults 中放置一个视图。您应该只在 NSUserDefaults 中放置一些数据。视图显示数据。获取数据后,很容易重新显示视图。考虑将一些需要的数据放在 NSUserDefaults 中。

于 2012-10-26T22:28:19.417 回答
2

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

于 2012-10-26T22:29:05.763 回答
1

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

缓存 UIView 以在 tableview 中重用

于 2012-10-26T22:57:03.533 回答