Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 数据成员的动态生成_Iphone_Objective C_Ipad - Fatal编程技术网

Iphone 数据成员的动态生成

Iphone 数据成员的动态生成,iphone,objective-c,ipad,Iphone,Objective C,Ipad,我制作了一个应用程序,它可以独立于标记解析给定的xml文件。它在单一级别的xml文件列表中运行良好。我想在对象上分配xml值。因为xml可能不同,所以类也必须是泛型类,数据成员也必须是泛型类。我可以通过使用数据类型id来实现通用数据成员。但问题是不同的xml可以有不同数量的数据类型。那么,是否可以在运行时确定数据成员的数量?(我在这里加载了两次xml,这对实现我们的目标有用吗?完全符合您的需要,如果您想要快速简单的东西,您可以使用NSMutableDictionary。完全符合您的需要,如果您想

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

完全符合您的需要,如果您想要快速简单的东西,您可以使用NSMutableDictionary。

完全符合您的需要,如果您想要快速简单的东西,您可以使用NSMutableDictionary。

您可以使用,来解决你的问题。

你可以用,来解决你的问题。

从这里来。请详细说明A-Live的答案:

如果对象只是一个完全通用的值持有者,那么您应该只使用
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
结构保存在一个对象中。对于您的情况,我将使用关联引用来实现协议:或字典中的字典。。。那看起来不太优雅。