使用NSString调用现有对象并调用方法 - objective-c

时间:2012-12-22 18:15:44

标签: objective-c cocoa

另一个简单的,对你们我的意思是:

我需要在现有对象上调用一个方法,如下所示:

[object method];

然而,对象的名称是不同的(这个代码是针对超类的,每个孩子都有不同的名称)。所以我想用这样的NSString调用对象:

NSString *objectName = @"object";
[objectName method];

我已经阅读过关于NSClassFromString(我现在一直在寻找几个小时),但这不起作用。然后我得到以下错误:“没有选择器'方法'的已知类方法。”

你们知道我做错了吗?

提前致谢, 反

4 个答案:

答案 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];