KVC:如何在plist中保存UIKit结构?

时间:2010-08-31 08:09:23

标签: iphone cocoa cocoa-touch ios4 core-graphics

我正在使用KVC设置plist中对象的属性。我知道我可以将它们保存为字符串<string>{{66, 114}, {64, 64}}</string>并手动转换为结构体,但是如何以Cocoa KVC理解的方式保存plist中的CGPoint或CGRect? Key-Value Coding Programming Guide似乎表明我需要将它们保存为NSValue s。怎么样?

1 个答案:

答案 0 :(得分:3)

  

键值编码编程指南似乎表明我需要将它们保存为NSValues。

不,您需要NSValue将点或矩形传递给setValue:forKey:。 KVC文档并不是在谈论将值保存在任何地方,因为那不是KVC的一部分。并且您无法在属性列表中保存NSValue,因为它不是property list类之一。

因此,您需要将矩形转换为其中一个属性列表数据类型。我更喜欢将它们转换为字符串,您可以使用some of the functions in UIKit进行转换。

这些实际上是Core Graphics结构,而不是UIKit(因此名称​​ CG Point和 CG Rect),因此您可能希望Core Graphics具有此功能。确实如此,但有一个不同的类型:在CGGeometry中,Core Graphics提供了将CGPoints和CGRects转换为字典和从字典转换的函数。

字符串或词典:这是您的选择。无论您选择哪个,它们都是属性列表,因此您可以将它们存储在属性列表输出中。

在检索时,将字典或字符串转换为点或矩形,并create an NSValue with that传递给setValue:forKey:。当然,这与另一种方式相反:保存时,valueForKey:将为您提供一个NSValue,您需要从中提取点或矩形以转换为字典或字符串以保存在plist中。