需要建议NSClassFromString

时间:2010-03-17 10:57:19

标签: iphone objective-c

根据此代码 我不了解NSClassFromString

我怎么知道“viewControllerName” 我可以从其他来源使用它吗?

您能告诉我更多关于如何使用NSClassFromString的信息吗?

UIViewController *viewController = [[NSClassFromString(viewControllerName) alloc] init];

2 个答案:

答案 0 :(得分:8)

NSClassFromString基于它的名称返回一个Objective-C类作为字符串(函数名称实际上是自解释的)...

您传入的字符串是您要创建的类的名称,例如:

如果你有一个名为MyViewController的类,并且你想从该字符串中获取一个Objective-C类,那么你可以使用这个函数,比如NSClassFromString(@"MyViewController");

通常,在测试可能无法使用的类名时,您只需执行此操作,例如,在编写同时针对iPhone OS 2.0和3.0的代码时。

如果您使用该类作为符号,如果该类在以前版本的操作系统上不存在,则会崩溃。所以你使用这个函数来返回一个使用该字符串的类,如果成功返回了类,你知道它存在并且使用是安全的,否则如果它返回nil,那么该类不存在,你不应该使用它,你的程序应该采取措施在这种情况下正常行事。

答案 1 :(得分:2)

我有一种情况,我希望在运行时确定类名,因此NSClassToString非常有用。但是,当从静态库中使用这些类时,它返回nil。我之前遇到过这个问题,并使用-ObjC链接器标志解决了这个问题。

但是,由于某些原因,在我目前的项目中,这并没有解决它。我能看到的唯一区别是,在第一种情况下(在教程之后)我创建了一个OSX静态库,并更改了相关部分以使其生成ARMv6版本。在第二种情况下,我从模板中为iPhone OS创建了一个静态库。

这确实是一个困惑。


修改

我找到了解决方案,所以这里是:我只是将-ObjC链接器标志添加到使用静态库的目标以及库本身的目标。