0

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

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

[object method];

但是,对象的名称每次都不同(此代码用于超类,子类都有不同的名称)。所以我想用这样的 NSString 调用对象:

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

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

你们知道我做错了什么吗?

提前致谢, 弗兰斯

4

4 回答 4

5

变量的名称仅在编译时才知道。无法从 NSString 中自动获取变量。但是,您可以使用 NSDictionary 并调用该方法,例如:

NSDictionary* dict = @{@"object": object, @"obj2": obj2};
NSString* objectName;
[dict[objectName] method];
于 2012-12-22T18:19:11.650 回答
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];
于 2012-12-22T18:19:51.000 回答
-1

没有您正在搜索的东西,但您可以通过使用isKindOfClass然后执行该方法来防止此错误。

于 2012-12-22T18:22:08.747 回答
-1

如果我正确理解了这一点并且您正在谈论类方法,那么问题是您不能“直接”向您正在创建的类发送消息。你必须使用performSelector.

SEL method = NSSelectorFromString(@"method");
Class class = NSClassFromString(@"SomeClass");
[(id)class performSelector:method];
于 2012-12-22T19:06:18.497 回答