2013-05-10 48 views
1

我正在使用CocosBuilder 2.1和Cocos2d-iPhone 2.0。我已经获得了CocosBuilder的编译,并且在我的项目中使用他们的单文本标签示例时出现了一个奇怪的问题。为什么NSClassFromString在这两种情况下返回零或不是?

这里是有问题的代码,从CCBReader.m路823:

Class class = NSClassFromString(className); 
if (!class) 
{ 
    NSLog(@"CCBReader: Could not create class of type %@",className); 
    return NULL; 
} 

这种失败与文本“无法创建类类型CCLabelTTF的”。但如果我改变这样的代码:

Class class = NSClassFromString(className); 
if (!class) 
{ 
    CCLabelTTF* tempLabel = [[CCLabelTTF alloc] init]; 
    [tempLabel release]; 
    NSLog(@"CCBReader: Could not create class of type %@",className); 
    return NULL; 
} 

它的工作原理。在这个地方我没有看到其他人遇到过CocosBuilder问题,所以发生了什么事?

奇怪的是,这种改变只能在编译器级别影响它,因为添加的代码在错误段内,对吗?

+0

什么是'className'? – Undo 2013-05-10 13:17:44

+0

className是一个NSString *。 – Almo 2013-05-10 13:19:23

+0

否 - 什么是*内容*? – Undo 2013-05-10 13:20:55

回答

3

因为您在项目中根本没有使用CCLabelTTF,所以运行时没有为您加载类。

它在你做了黑客攻击之后就起作用了,因为你的项目现在使用了CCLabelTTF类,所以运行库会加载它。

来解决这个问题,添加-ObjC到链接器标志,检查细节在以下链接

http://developer.apple.com/library/mac/#qa/qa1490/_index.html https://stackoverflow.com/a/2615407/642626

+0

这会导致其他链接器错误的加载......正在处理它。 – Almo 2013-05-10 13:30:25

+0

是什么问题? – 2013-05-10 13:31:15

+0

看起来像其他一些库不包含在构建中。我可能只需要包含OpenAL库或其他东西。 – Almo 2013-05-10 13:31:58

0

apple documentation

通过aClassName命名的类的对象,或者零如果当前没有装载类叫这个名字。如果aClassName为零,则返回nil。

变量“className”为零,或者在此调用之前未在运行时加载类。 试图强行加载这个类有这样的:

[CCLabelTTF class]; 

在代码的任何地方。

未来:在创建新的之前,请尝试搜索your question

+0

我搜索了,并找到了您发布的链接。它没有回答我的特定问题。 – Almo 2013-05-10 13:29:10

+0

我不能做[CCLabelTTF类],因为className来自一个文件,我不知道它会是哪个类。 – Almo 2013-05-10 13:29:55

+0

然后在你的问题中指定这个信息,其他答案可能会有帮助,然后 – 2013-05-10 13:31:19

相关问题