Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 Cocos 2D v1.0.1:更改CCMenuItemImage正常映像时崩溃_Objective C_Ipad_Crash_Cocos2d Iphone - Fatal编程技术网

Objective c Cocos 2D v1.0.1:更改CCMenuItemImage正常映像时崩溃

Objective c Cocos 2D v1.0.1:更改CCMenuItemImage正常映像时崩溃,objective-c,ipad,crash,cocos2d-iphone,Objective C,Ipad,Crash,Cocos2d Iphone,我检索了一个崩溃日志文件,在对归档文件进行XCode分析后,该文件显示了有问题的代码行: Date/Time: 2012-12-08 23:48:08.930 +0100 OS Version: iPhone OS 5.1.1 (9B206) Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x00000000, 0x00000000 Crashed Thread: 0

我检索了一个崩溃日志文件,在对归档文件进行XCode分析后,该文件显示了有问题的代码行:

Date/Time:       2012-12-08 23:48:08.930 +0100
OS Version:      iPhone OS 5.1.1 (9B206)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x31a4088f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x3188b259 objc_exception_throw + 33
2   CoreFoundation                  0x31a40789 +[NSException raise:format:] + 1
3   Foundation                      0x374c73a3 -[NSAssertionHandler     handleFailureInMethod:object:file:lineNumber:description:] + 91
4   Killer                          0x0017ed35 -[CCSprite initWithFile:] (CCSprite.m:201)
5   Killer                          0x0017e419 +[CCSprite spriteWithFile:] (CCSprite.m:93)
6   Killer                          0x00123101 -[Player makeZombie] (Player.m:1363)
7   Killer                          0x00105a51 -[PlayScene endOfKilling:] (PlayScene.m:1438)
这清楚地表明以下两行中的第二行正在崩溃:

NSLog(@"images %@ %@",self.zombieImage,self.zombieImageDown); 
[self.characterSprite setNormalImage:[CCSprite spriteWithFile:self.zombieImage]];
我知道,当用户触摸相应的CCMeanuItemImage时,崩溃似乎发生了。当我们更改它的正常et选定图像时,如果用户触摸它,是否有问题?这是改变其形象的正确方式吗(我在游戏中多次这样做)


感谢您的想法

您的崩溃与触摸菜单项有关,只是因为您在单击按钮时调用的方法中所做的操作

从崩溃报告中,您可以看到导致崩溃的调用堆栈。它说在第201行的CCSprite类中有一个断言(因为cocos2d是开源的,你可以检查这一行,看看哪种断言被破坏了),这是从第1363行的makeZombie方法中的Player类调用的(你确定你需要这么大的类吗?我假设你在单个类中放置了太多逻辑)


因此,检查断言行并检查makeZombie方法中的行

有问题的调用是initWithFile,因为在此之后它被称为handlerFailureInMethod。
如果问题是initWithFile,请确保您正在验证的文件不可用。

检查self.zombieImage是否为有效的图像文件名。我猜zombie image不是文件名(NSString),而是图像(UIImage),因此如果是这种情况,请将图像替换为其文件名

感谢您的帮助,文件名似乎为零,但我在分配此成员的极少数位置设置了断言,我无法捕获任何内容,似乎有什么东西正在将我的变量在某个位置变为零,但我找不到方法,您能建议如何跟踪此事件吗?似乎问题并不是每次都会发生,因为zombieImage是一个ivar,您可以观察关键路径,查看它何时更改,并将其设置为零。但是,如果您不跟踪错误,请发布更多代码,以便我们看到zombieImage何时变为零。非常感谢您的帮助,正如我在其他评论中的其他回答所述,我不明白为什么我的变量在那个时候可能是零,每次赋值时都会出现断言。有跟踪这个问题的想法吗?谢谢,谢谢你的建议,我的类可能太大了,即使对应于一个真正的逻辑实体,我可能会将一些部分插入更小的部分,尽管已经尽可能多地完成了:)