2010-12-09 34 views
1

这里是新手问题。我希望能够通过数据(即XML文件)指定要发送的适当的Objective-C消息。任何意见,如果这是可能的或我可以做到这一点?如何命名一个obj-c函数来调用xml数据

下一个最好的事情,如果我不能做到这一点,将创建一个地图对象,将关键(int)与函数(我猜也是选择器)相关联。如果以上不是,那么这可能吗?

如果有人能指点我一些教程或示例代码作为参考,那会很棒。现在我正在做一个大转换语句,我不喜欢它。 (我打开id,并在每种情况下,明确调用与特定id相关的方法。)

+0

严重的是,我希望我可以upvote你两次。一个连贯的问题和一个问题,更多的初学者应该问。干杯。 – 2010-12-09 07:20:15

回答

1

我爱你问这个问题;经常,我看到撒旦的肿胀开关声明。很高兴看到有人想使用函数表来代替。

如果您可以使用属性列表文件(通常使用XML编码),这非常简单。

只需制作一个属性列表,其中的根元素是一个字典,从某些键映射到某些选择器。

Key    Type   Value 
---------------------------------------------- 
Root    Dictionary 
    firstKey  String  someSelector 
    secondKey  String  anotherSelector 

装入属性列表中的内容为NSDictionary

id path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"]; 
id dict = [NSDictionary dictionaryWithContentsOfFile:path]; 

SEL selector = NSSelectorFromString([dict objectForKey:@"firstKey"]); 
if ([someObject respondsToSelector:selector]) { 
    [someObject performSelector:selector]; 
} 

当然,你会想这个逻辑重构为一个适当的方法,而且很可能缓存属性列表作为一个实例变量。

注意:我个人认为最好把这个函数表放在一边;属性列表很酷,但我不确定它在这种情况下非常有用。另外,如果你对使用Objective-C++很酷,std::map将允许你摆脱不包装和解开NSString对象等选择器。

+0

objective-C++ ??? :) – willcodejavaforfood 2010-12-09 08:46:23

相关问题