我制作了一个应用程序,它可以独立于标签解析给定的 xml 文件。它适用于列表单级 xml 文件。我想在对象上分配 xml 值。由于 xml 可以不同,因此类也必须是通用的,数据成员也必须是通用的。我可以通过使用数据类型 id 来实现通用数据成员。但问题是不同的 xml 可以有不同数量的数据类型。那么是否可以在运行时决定数据成员的数量?(这里我两次加载 xml 对实现我们的目标有用吗?)
3 回答
键值编码完全符合您的需求,如果您想要快速简单的东西,您可以使用 NSMutableDictionary。
从OP 的另一个问题来到这里。只是为了详细说明 A-Live 的答案:
如果对象只是一个完全通用的值持有者,那么您应该只使用NSMutableDictionary
. 没有特别需要为此使用 KVC,尽管它可以工作。
如果对象有一些固定属性加上任意数量的临时属性,或者如果它除了保存值之外还必须有一些行为,那么您可以将一个包装NSMutableDictionary
在自定义类中。-valueForUndefinedKey:
在这种情况下,当键不对应于类的任何正常属性时,您的自定义类将实现从字典中检索值。同样,它将实现-setValue:forUndefinedKey:
允许通过将临时属性存储在字典中来设置它们。
一旦定义了这两个方法,类的客户端就可以使用 KVC 来获取和设置属性值,使用-valueForKey:
and -setValue:forKey:
。
您实现的任何“未定义键”方法都可以通过将任何和所有键传递给字典来完全允许,或者它们可以根据允许/已知属性列表检查键。该列表仍将在运行时建立,而不是在编译时固定,但是,如果您从某个地方获得该信息,它会建立一些额外的安全性。对于未知/不允许的键,只需调用 tosuper
的实现。
如果您愿意,这两种方法(更可能是 setter)也可以实现与特定属性相关的行为。