我如何制定
[NSClassFromString(classname) myMethod:param1 more:param2];
这样编译器不会发出警告说+ myMethod可能没有实现?
答案 0 :(得分:8)
[NSClassFromString(classname) performSelector: @selector(myMethod:more:) withObject:param1 withObject:param2];
答案 1 :(得分:6)
快速& dirty:如果myMethod:more:是唯一的,则将NSClassFromString
的返回值转换为id
。方法绑定直到运行时才会发生,因此将调用正确的impl。
稍微清晰:如果param1和param2是-(id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject
,则使用NSObject的id
。当在类对象上调用时,它也适用于类方法。
答案 2 :(得分:3)
好吧,既然你有多个参数,就不能使用-performSelector:withObject:
。您必须使用Objective-C在幕后使用的内容objc_msgSend()
。但首先你必须施展它。方法如下:
在您的实施文件(.m
)中,将行#import <objc/message.h>
添加到顶部。然后,您需要适当地投射objc_msgSend()
。在此示例中,我们假设param1
和param2
是Objective-C对象,-myMethod:more:
返回void
。
void (*myMsgSend)(id self, SEL _cmd, id param1, id param2);
myMsgSend = (void(*)(id, SEL, id, id))objc_msgSend;
一旦你适当地施放它,请调用你的新功能:
myMsgSend(obj, @selector(myMethod:more:), param1, param2);
答案 3 :(得分:-1)
首先尝试将NSClassFromString()
返回的值进行类型转换为id
。