新手问题在这里。我希望能够通过数据(即XML文件)指定要发送的相应Objective-C消息。关于这是否可能或我如何做到这一点的任何建议?
下一个最好的事情,如果我不能这样做,将会有一些方法来创建一个地图对象,将一个键(一个int
)与一个函数(我猜也是一个选择器)相关联。如果以上情况不可能,那可能吗?
如果有人可以指点我的教程或示例代码作为参考,那就太好了。现在我正在用一个大的switch语句做事,我不喜欢它。 (我正在切换id,并且在每种情况下,显式调用与特定id相关的方法。)
答案 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
对象等中不包装和展开选择器。