NSKeyedArchiver / NSuserDefaults - 保存CGRect

时间:2010-02-16 03:35:09

标签: nsuserdefaults

我的应用程序涉及用户能够拖动特定项目,如音量滑块和UIImage视图。我的目标是能够保存项目的位置,以便用户在重新启动后不必再次拖动项目。不幸的是,我在看到“保存CGRect rect = item.frameNSuserDefaultsNSKeyedArchiver”路线时遇到了错误。还有其他建议吗?

4 个答案:

答案 0 :(得分:17)

您可以使用NSStringFromgCGRect()和CGRectFromString()来存储它们。

答案 1 :(得分:11)

如果您在iPhone上使用键控存档,UIKit特别支持这样的添加:-encodeCGRect:forKey:并且正是您想要的。请参阅NSCoder's UIKit additions的Apple文档。

如果您正在使用NSUserDefaults,那么您无法使用CGRects的显式编码器,但正如其他一些答案所说,您可以使用NSStringFromCGRect()将其保存为字符串,反之亦然。

答案 2 :(得分:0)

您可能会使用CGRectNSData进行编码,然后使用NSDataNSUserDefaults存储NSKeyedArchiver个对象。

我不确定你在问题中提到了什么错误,可能需要更多解释?

答案 3 :(得分:-4)

您必须将CGRect中的浮点数转换为NSNumbers,然后将它们放入字典中。

如果你需要存储很多CGRect,我建议创建一个带有CGRect元素的轻量级类作为可存档的NSNumber属性。创建一个采用CGRect的初始化程序。然后编写快速NSCoder协议方法,以便整个对象可以存档

通过这种方式,您可以快速轻松地转换,存储然后检索CGRect。