Objective c 在这两种情况下,为什么NSClassFromString返回nil或不返回nil?
我正在使用CoCosBuilder2.1和Cocos2d iPhone 2.0。我已经让CocosBuilder进行编译,在我的项目中使用他们的单文本标签示例时,我遇到了一个奇怪的问题 下面是有问题的代码,来自CCBReader.m第823行:Objective c 在这两种情况下,为什么NSClassFromString返回nil或不返回nil?,objective-c,cocoa,Objective C,Cocoa,我正在使用CoCosBuilder2.1和Cocos2d iPhone 2.0。我已经让CocosBuilder进行编译,在我的项目中使用他们的单文本标签示例时,我遇到了一个奇怪的问题 下面是有问题的代码,来自CCBReader.m第823行: Class class = NSClassFromString(className); if (!class) { NSLog(@"CCBReader: Could not create class of type %@",className);
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有任何问题,所以发生了什么
奇怪的是,此更改只能在编译器级别影响它,因为添加的代码位于错误段内,对吗?来自:
由aClassName命名的类对象,如果当前未加载由该名称命名的类,则为nil。如果aClassName为nil,则返回nil
要么变量“className”为nil,要么在此调用之前未在运行时加载该类。
尝试使用以下内容强制加载此类:
[CCLabelTTF class];
代码中的任何地方
对于未来:在创建新类之前尝试搜索。因为您在项目中根本没有使用
cclabeltf
,所以运行时没有为您加载类
它在您进行黑客攻击后工作,因为您的项目现在确实使用了CCLabelTTF
类,所以运行时将加载它
要解决此问题,请将-ObjC
添加到链接器标志中,查看以下链接中的详细信息
className是一个NSString*。否-内容是什么?您不能这样做。NSStrings只能作为指针创建。如果我得到的输出是“无法创建CCLabelTTF类型的类”,那么内容必须是“CCLabelTTF”,对吗?或者我遗漏了什么…看看我的个人资料。你会发现我的接受率很高。我还在研究这个问题。一个答案会导致其他问题,另一个答案不起作用,因为类名未知,并且是从文件中动态加载的。一旦问题解决,我会接受答案。我搜索了,找到了你发布的链接。它没有回答我的特定问题。我无法执行[CCLabelTTF类],因为类名来自一个文件,我不知道它将是哪个类。然后在你的问题中指定此信息,另一个答案可能会有所帮助。如果我可以只放置CCLabelTTF,为什么我会将其设置为字符串,类名?因为,在某些情况下,您必须使用NSString而不是ClassString。这会导致加载其他链接器错误。。。正在处理它。生成中似乎不包括其他一些库。我可能只需要包含OpenAL库或其他东西。例如:“\u alGetListenerf”,引用自libcosDenshion.a(CocosDenshion.o)中的:-[CDSoundEngine masterGain]好的,只需要在主项目中包含一些框架。我以静态库的形式链接到Cocos2d,因此-ObjC标志需要所有引用的框架。谢谢