我喜欢小型对象集合的plist序列化功能:它很简单,存储是XML等。但是我发现字典中的设置值很麻烦:
[myDict setObject:keepThis forKey:@"ivar"];
我更喜欢使用派生类的对象(甚至只是结构):
myObj.ivar = keepThis
...然后向集合发送消息以获取plist。可以限制用于此目的的类/结构,以便它们可以直接轻松地映射到plist原语;例如,myObj可以映射到NSDictionary,并且可以将一个要求放在ivars上,这样它们就是plist原语之一。
有人已为此建立了设施,还是应该自己动手?
答案 0 :(得分:5)
我不确定这是你所说的,但Key Value Coding将会让你get a dictionary with values from an instance's data以及set instance data from a dictionary。{} p>
还有一种方法ask an instance for a list of its attributes,但事实证明你必须自己编写一些代码来实现这一目标。 (但是,您可以使用runtime introspection来实现,如果您愿意的话。)编辑2011年1月2日: -[NSObject attributeKeys]
不再出现在iOS文档中。我编辑了链接以指向Mac文档,但请注意,这可能只是该平台上的一个选项。
(NSCoding
协议是另一种让你的对象自己存储/恢复的方法,但是存储是二进制的,而不是XML,你仍然有责任获取/放置你关注的每个值。系统这样做。)
答案 1 :(得分:3)
您可能需要查看this SO question,其中讨论了在运行时将实例的ivars放入字典中。
答案 2 :(得分:2)
一个有趣的项目。 Objective-C 2.0 Programming Guide有一个关于运行时函数的部分,用于动态获取类属性的列表:
objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
有了这个,使用获取属性列表并将它们放入字典的方法在NSObject
上编写一个类别应该很容易。
答案 3 :(得分:0)
为了使用此属性,您需要有一组预定义的可能键。您不能将任意名称与点语法一起使用 - 它必须是第一个操作数的已知属性或访问者。所以不能有这种通用形式。但是如果你自己做了一个,那么变成字典就像做[self dictionaryWithValuesForKeys:listOfProperties]
一样简单。
答案 4 :(得分:0)
我在其他地方看过这个,但这正是我想要的。上面的答案指向原料,但在这里,所有包装起来:http://retaincount.com/blog/?p=7