添加对象时,NSMutableArray会崩溃应用程序

时间:2011-08-05 22:02:40

标签: animation crash cocos2d-iphone

我在Mac OS X 10.6.8上使用Xcode 4和Cocos2D。我正在尝试使用精灵表来制作动画。这是我的代码:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"scrollAnimation.plist"];
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"scrollAnimation.png"];
[self addChild:spriteSheet];

NSMutableArray *animFrames = [NSMutableArray array];

for(int i = 0; i < 10; i++) {
    [animFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"scroll%d.png", i]]];
}

self.scrollAnim = [CCAnimation animationWithFrames:animFrames delay:0.05f];

self.scroll = [CCSprite spriteWithSpriteFrameName:@"scroll0.png"];
_scroll.position = ccp(_winSize.width*1.5, _winSize.height*1.5);
[spriteSheet addChild:_scroll]; 

这在模拟器中可以正常工作,但是当我获得设备构建时,它会崩溃。我已将其缩小到将对象添加到数组中。如果我在for循环之前对所有内容进行注释,那么只需添加spriteFrameByName部分即可。但当我尝试将其放入数组时,应用程序会在设备上崩溃。

任何帮助?

2 个答案:

答案 0 :(得分:0)

这种行为的最可能原因是您的应用程序占用了它拥有的所有内存并且操作系统将其杀死。我之所以这样说是因为在这种情况下你很难从崩溃日志中得到任何提示,而且当你的应用程序在模拟器中工作但在设备中没有时也是如此。

所以,为了调查这个问题,我首先要检查是否有崩溃前的内存警告跟踪(如果covos2d已启用跟踪)。那将是一个明显的迹象。

实际上,当你收到导致崩溃的内存警告时,还有第二种可能的结果。您的应用收到内存警告(查看cocos2d跟踪);您的纹理缓存被清空,因此当您尝试使用您认为预先缓存的纹理时,应用程序崩溃。但在这种情况下,错误将更加冗长。如果您认为问题与此相关,请查看以下帖子:http://labs.freescapes.org/blog/2011/07/cocos2d-and-memory-warnings/

答案 1 :(得分:0)

我发现在模拟器中工作但未在设备上工作的原因之一是因为输入的文件名称错误。我会检查以确保scrollAnimation.plist的名称不是真正的ScrollAnimation.plist或scrollanimation.plist,而且与scroll0.png相同的是它没有真正命名为Scroll0.png