如何命名obj-c函数来调用xml数据

时间:2010-12-09 07:07:31

标签: objective-c function-pointers selector

新手问题在这里。我希望能够通过数据(即XML文件)指定要发送的相应Objective-C消息。关于这是否可能或我如何做到这一点的任何建议?

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

如果有人可以指点我的教程或示例代码作为参考,那就太好了。现在我正在用一个大的switch语句做事,我不喜欢它。 (我正在切换id,并且在每种情况下,显式调用与特定id相关的方法。)

1 个答案:

答案 0 :(得分:1)

我喜欢你提出这个问题;我经常看到 撒旦的Swollen Switch声明 。很高兴看到有人想要使用功能表。

如果你可以使用属性列表文件(通常用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对象等中不包装和展开选择器。