另一个简单的,对你们我的意思是:
我需要在现有对象上调用一个方法,如下所示:
[object method];
然而,对象的名称是不同的(这个代码是针对超类的,每个孩子都有不同的名称)。所以我想用这样的NSString调用对象:
NSString *objectName = @"object";
[objectName method];
我已经阅读过关于NSClassFromString(我现在一直在寻找几个小时),但这不起作用。然后我得到以下错误:“没有选择器'方法'的已知类方法。”
你们知道我做错了吗?
提前致谢, 反
答案 0 :(得分:5)
变量的名称仅在编译时才知道。无法从NSString自动获取变量。但是,您可以使用NSDictionary并调用该方法,例如:
NSDictionary* dict = @{@"object": object, @"obj2": obj2};
NSString* objectName;
[dict[objectName] method];
答案 1 :(得分:1)
C中没有反射,你所能做的就是将对象放在字典中或使其成为一个ivar。
例如:
@property (nonatomic,strong) id objectName1; // with ARC
@property (nonatomic,strong) id objectName2;
...
@property (nonatomic,strong) id objectNameN;
然后:
NSString* key= @"objectName1"; // objectName1 or whatever
id object= [self valueForKey: key];
[object method];
答案 2 :(得分:-1)
您没有搜索此类内容,但可以使用isKindOfClass
然后执行该方法来防止此错误。
答案 3 :(得分:-1)
如果我理解正确并且您正在讨论类方法,问题是您无法“直接”向正在创建的类发送消息。您必须使用performSelector
。
SEL method = NSSelectorFromString(@"method");
Class class = NSClassFromString(@"SomeClass");
[(id)class performSelector:method];