在 Objective-C 中是否有更好的方法来序列化 plist-y 对象?
-
22-07-2019 - |
题
我喜欢小对象集合的 plist 序列化功能:很简单,存储是XML等。但我发现在字典中设置值很麻烦:
[myDict setObject:keepThis forKey:@"ivar"];
我更喜欢使用类的派生对象(甚至只是结构):
myObj.ivar = keepThis
...然后向集合发送消息以获取 plist。用于此目的的类/结构可以受到限制,以便它们直接轻松地映射到 plist 原语;例如,myObj 可以映射到 NSDictionary,并且可以对 ivars 提出要求,使其成为 plist 原语之一。
是否有人已经为此建立了设施,或者我应该自己建立设施?
解决方案 5
我看到这张贴在其他地方,但它正是我一直在寻找。上述观点的答案,原材料,但在这里,所有包裹式:的http:// retaincount.com/blog/?p=7
其他提示
我不确定这就是你所说的,但是 键值编码 除其他事项外,将让您 获取包含实例数据值的字典, ,并且 从字典中设置实例数据.
还有一种方法可以 向实例询问其属性列表, ,尽管事实证明您必须自己编写一些代码才能使其工作。(不过,您可以使用 运行时自省 如果您愿意的话,可以实现这一点。) 2011 年 1 月 2 日编辑: -[NSObject attributeKeys]
不再出现在 iOS 文档中。我已编辑了指向 Mac 文档的链接,但请注意,这可能只是该平台上的一个选项。
(这 NSCoding
协议是让对象存储/恢复自身的另一种方式,但存储是二进制的,而不是 XML,并且当系统要求时,您仍然负责获取/放置您关心的每个值。)
您可能要检查出的该SO质疑其论述了在运行时把一个实例的实例变量在字典中。
这是有趣的项目。的目的-C 2.0编程指南一>对运行时功能的部分,以动态地获得一类的属性的列表:
objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
通过这一点,应该是很容易写一个类别上与得到的属性列表,并将它们放入一个字典的方法NSObject
。
为了用于该属性时,将需要具有预定的一组可能的密钥。您不能使用与点语法的任意名称 - 它必须是一个已知的属性或访问的第一个操作数。所以不可能有这种情况的一般形式。但是,如果你做你自己的,变成一本字典是因为这样做[self dictionaryWithValuesForKeys:listOfProperties]
一样简单。