Iphone 数据成员的动态生成
我制作了一个应用程序,它可以独立于标记解析给定的xml文件。它在单一级别的xml文件列表中运行良好。我想在对象上分配xml值。因为xml可能不同,所以类也必须是泛型类,数据成员也必须是泛型类。我可以通过使用数据类型id来实现通用数据成员。但问题是不同的xml可以有不同数量的数据类型。那么,是否可以在运行时确定数据成员的数量?(我在这里加载了两次xml,这对实现我们的目标有用吗?完全符合您的需要,如果您想要快速简单的东西,您可以使用NSMutableDictionary。完全符合您的需要,如果您想要快速简单的东西,您可以使用NSMutableDictionary。您可以使用,来解决你的问题。你可以用,来解决你的问题。从这里来。请详细说明A-Live的答案: 如果对象只是一个完全通用的值持有者,那么您应该只使用Iphone 数据成员的动态生成,iphone,objective-c,ipad,Iphone,Objective C,Ipad,我制作了一个应用程序,它可以独立于标记解析给定的xml文件。它在单一级别的xml文件列表中运行良好。我想在对象上分配xml值。因为xml可能不同,所以类也必须是泛型类,数据成员也必须是泛型类。我可以通过使用数据类型id来实现通用数据成员。但问题是不同的xml可以有不同数量的数据类型。那么,是否可以在运行时确定数据成员的数量?(我在这里加载了两次xml,这对实现我们的目标有用吗?完全符合您的需要,如果您想要快速简单的东西,您可以使用NSMutableDictionary。完全符合您的需要,如果您想
NSMutableDictionary
。尽管KVC可以工作,但没有特别需要使用它
如果对象有一些固定属性加上任意数量的特殊属性,或者除了保存值之外还必须有一些行为,那么您可以在自定义类中包装一个NSMutableDictionary
。在这种情况下,自定义类将实现-valueforundinedkey:
,以便在键与类的任何常规属性不对应时从字典中检索值。同样,它将实现-setValue:forundinedkey:
,以便通过将特殊属性存储在字典中来设置它们
一旦定义了这两个方法,该类的客户机就可以使用KVC获取和设置属性值,使用-valueForKey:
和-setValue:forKey:
您实现的任何一个“未定义键”方法都可以通过将任何和所有键传递到字典来完全允许,或者它们可以根据允许/已知属性的列表检查键。该列表仍将在运行时建立,而不是在编译时固定,但是,如果您从某处获得了该信息,它将建立一点额外的安全性。对于未知/不允许的键,只需调用super
的实现即可
如果您愿意,这两种方法(更可能是setter)也可以实现与特殊属性相关的行为。来自这里。请详细说明A-Live的答案:
如果对象只是一个完全通用的值持有者,那么您应该只使用NSMutableDictionary
。尽管KVC可以工作,但没有特别需要使用它
如果对象有一些固定属性加上任意数量的特殊属性,或者除了保存值之外还必须有一些行为,那么您可以在自定义类中包装一个NSMutableDictionary
。在这种情况下,自定义类将实现-valueforundinedkey:
,以便在键与类的任何常规属性不对应时从字典中检索值。同样,它将实现-setValue:forundinedkey:
,以便通过将特殊属性存储在字典中来设置它们
一旦定义了这两个方法,该类的客户机就可以使用KVC获取和设置属性值,使用-valueForKey:
和-setValue:forKey:
您实现的任何一个“未定义键”方法都可以通过将任何和所有键传递到字典来完全允许,或者它们可以根据允许/已知属性的列表检查键。该列表仍将在运行时建立,而不是在编译时固定,但是,如果您从某处获得了该信息,它将建立一点额外的安全性。对于未知/不允许的键,只需调用super
的实现即可
如果您愿意,这两种方法(更可能是setter)也可以实现与特殊属性相关的行为。请详细说明kvc如何满足我的要求。带有
valueForKeyPath:
和setValue:forKeyPath:
的键路径将帮助您将解析后的xml
结构保存在一个对象中。对于您的情况,我将使用关联引用来实现协议:或字典中的字典。。。这看起来不太优雅。请详细说明kvc如何满足我的要求。带有valueForKeyPath:
和setValue:forKeyPath:
的关键路径将帮助您将解析的xml
结构保存在一个对象中。对于您的情况,我将使用关联引用来实现协议:或字典中的字典。。。那看起来不太优雅。