Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在这两种情况下,为什么NSClassFromString返回nil或不返回nil?_Objective C_Cocoa - Fatal编程技术网

Objective c 在这两种情况下,为什么NSClassFromString返回nil或不返回nil?

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);

我正在使用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);
    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标志需要所有引用的框架。谢谢