动态生成数据成员

时间:2012-05-23 04:07:06

标签: iphone objective-c ipad

我创建了一个可以独立于其标记解析给定xml文件的应用程序。它在列表单级别的xml文件中工作得很好。我想在对象上分配xml值。由于xml可以是不同的,所以类也必须是通用的,数据成员也必须。我可以使用数据类型id来实现通用数据成员。但问题是不同的xml可以有不同数量的数据类型。那么可以在运行时决定数据成员的数量吗? (这里我加载xml两次是否有助于实现我们的目标?)

3 个答案:

答案 0 :(得分:0)

Key-Value Coding完全符合您的需求,如果您想要快速和安全的话,您可以使用NSMutableDictionary。简单。

答案 1 :(得分:0)

another question of the OP's来到这里。只是详细说明A-Live的答案:

如果对象只是值的完全通用持有者,那么您应该只使用NSMutableDictionary。虽然它有效,但没有特别需要使用KVC。

如果对象具有一些固定属性加上任意数量的ad hoc属性,或者除了保持值之外还必须具有某些行为,那么您可以将NSMutableDictionary包装在自定义类中。在这种情况下,当密钥与任何类的正常属性不对应时,您的自定义类将实现-valueForUndefinedKey:以从字典中检索值。同样,它将实现-setValue:forUndefinedKey:以允许通过将它们存储在字典中来设置ad hoc属性。

一旦定义了这两个方法,那么该类的客户端可以使用KVC来获取和设置属性值,使用-valueForKey:-setValue:forKey:

您实现的任何“未定义密钥”方法都可以通过将任何和所有密钥传递到字典完全允许,或者他们可以根据允许/已知属性列表检查密钥。此列表仍将在运行时建立,而不是在编译时固定,但是,如果您从某个地方获得该信息,则会建立一些额外的安全性。对于未知/不允许的密钥,只需调用super的实现。

如果你愿意,这两种方法 - 更有可能是setter - 也可以实现与ad hoc属性相关的行为。

答案 2 :(得分:-1)

您可以使用Touch XMLTBXML来解决问题。