3

我喜欢小对象集合的 plist 序列化功能:它很简单,存储是 XML 等。但我发现在字典中设置值很麻烦:

[myDict setObject:keepThis forKey:@"ivar"];

我更喜欢使用类派生的对象(甚至只是结构):

myObj.ivar = keepThis

...然后向集合发送消息以获取 plist。可以限制用于此目的的类/结构,以便它们直接轻松地映射到 plist 原语;例如,myObj 可以映射到 NSDictionary,并且可以对 ivars 提出要求,使它们成为 plist 原语之一。

有人已经为此建造了设施,还是我应该自己动手?

4

5 回答 5

5

我不确定这就是您所说的,但是键值编码除其他外,还可以让您从实例的数据中获取包含值的字典,并从字典中设置实例数据

还有一种方法可以向实例询问其属性列表,尽管事实证明您必须自己编写一些代码才能使其工作。(不过,如果需要,您可以使用运行时自省来实现它。)2011 年 1 月 2 日编辑: -[NSObject attributeKeys]不再出现在 iOS 文档中。我已经编辑了指向 Mac 文档的链接,但请注意,这可能只是该平台上的一个选项。

(该NSCoding协议是让您的对象存储/恢复自己的另一种方式,但存储是二进制的,而不是 XML,当系统要求您这样做时,您仍然负责获取/放置您关心的每个值。)

于 2009-10-30T21:49:14.187 回答
3

您可能想查看这个 SO question ,该问题讨论了在运行时将实例的 ivars 放入字典中。

于 2009-10-30T22:22:26.960 回答
2

一个有趣的项目。Objective-C 2.0 Programming Guide有一节介绍运行时函数以动态获取类的属性列表:

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

NSObject有了这个,使用获取属性列表并将它们放入字典的方法编写一个类别应该很容易。

于 2009-10-30T22:00:48.020 回答
0

为了为此使用属性,您需要有一组预定义的可能键。您不能在点语法中使用任意名称——它必须是第一个操作数的已知属性或访问器。所以不能有一个通用的形式。但是,如果您确实自己制作了一本,那么变成一本字典就像做[self dictionaryWithValuesForKeys:listOfProperties].

于 2009-10-30T23:03:48.890 回答
0

我在其他地方看到了这个帖子,但这正是我想要的。上面的答案指向原料,但在这里,所有的包装:http ://retaincount.com/blog/?p=7

于 2009-11-21T08:29:23.527 回答