在运行时创建一个类 - 为什么NSClassFromString和objc_getclass返回nil?

Bra*_*rks 2 iphone runtime

我试过用这两个:

NSClassFromString and objc_getclass 
Run Code Online (Sandbox Code Playgroud)

返回一个类,所以我可以在运行时创建它,但是对于某些类,两个函数都返回nil,例如"TestClass".请注意,NSClassFromString适用于99%的类.

如果我加

[TestClass class];
Run Code Online (Sandbox Code Playgroud)

在我调用NSStringFromClass或objc_getclass之前,它可以工作.如果我尝试使用类引用创建类,即:

[TestClass alloc];
Run Code Online (Sandbox Code Playgroud)

它也有效.那么如何强制类在运行时加载,以便NSClassFromString或objc_getclass不会返回nil?

Mar*_*tle 6

我遇到了同样的问题.在我的情况下,我有使用的查找类的代码

Class aClass = objc_getClass("Foo");
Run Code Online (Sandbox Code Playgroud)

当Foo类与我的AppDelegate在同一个项目包中时,哪个有效.

作为重构代码的一部分,我将Foo类和关联的模型类从AppDelegate项目中移动到一个更容易测试和重用的公共静态lib项目中.

当我将Foo类移动到libFooBar时,objc_getClass("Foo")现在返回nil而不是Foo类.

为了解决这个问题,我调用了我感兴趣的类,以便libFooBar中的类在Objective-C运行时中注册.我是这样做的:

Foo* foo = [[Foo alloc] init];
[foo release];
Class aClass = objc_getClass("Foo");
Run Code Online (Sandbox Code Playgroud)

现在objc_getClass("Foo")再次返回Foo类而不是nil.

我只能假设静态库类没有注册,直到调用静态库中的一个类.