我的问题如下。我有一个简单地采用XML摘录和XPath的方法。然后它应该为我创建一个XML摘录的对象数组。这意味着如果我传递了以下XML:
<user>
<name>Bob</name>
<age>50</age>
</user>
我的方法将实例化User类的实例,并使用键值编码来设置实例变量。这是相当直接的。唯一的问题是我来自大多数脚本背景,并试图看看是否可以将方法传递给类名。现在它正在做一个User类,后来它可能是一个Cars类,然后是一个Home类。在保持代码尽可能抽象的同时,从这种不同类型的方法实例化对象的最佳方法是什么?
答案 0 :(得分:54)
要使用其名称实例化类,可以使用NSClassFromString:
id obj = [[NSClassFromString(@"MySpecialClass") alloc] init];
答案 1 :(得分:23)
类是对象,可以像其他对象一样使用/发送。
创建一个类对象:
Class classForElement = [MyUserClass class];
实例化该类的对象
id newObject = [[classForElement alloc] init];
如果类名与元素名不同,请创建一个字典,其中Class为对象,元素名为键。
[NSDictionary dictionaryWithObjectsAndKeys:
[MyUserClass class], @"user",
[MyCarClass class], @"car",
[MyHomeClass class], @"home",
nil]];
答案 2 :(得分:1)
您想深入了解核心数据。托管对象可能会拯救。
CocoaDevCentral有一些介绍文章,但您可能需要Apple文档。
http://cocoadevcentral.com/articles/000086.php
[编辑]我刚才提醒你,你是在iPhone上做的。核心数据框架的不可用并不意味着你不能借用它,只是重新实现你需要的东西。其中一个开源OpenStep框架可能有代码。
在移动设备上,您可能需要注意数据的大小。
Ezra Epstein关于类的运行时创建(以及更多):
http://www.macdevcenter.com/pub/a/mac/2002/05/24/runtime_partone.html
答案 3 :(得分:0)
尝试在方法签名中使用id作为参数类型。可以将id对象类型转换为任何类对象
你在为iPhone做项目吗?您使用的是NSXMLNode吗?如果您是,请注意只能在模拟器上使用NSXMLNode。它不适用于iPhone,因为NSXMLNode是核心库的一部分。