【问题标题】:NSMutable Array ,Sprite Kit (EXC_ARITHMETIC) error?NSMutableArray ,Spritekit (EXC_ARITHMETIC) 错误?
【发布时间】:2014-07-22 04:36:48
【问题描述】:

我正在尝试创建一个 SKlabelNode,每次调用场景时都会显示随机文本。我觉得我做的一切都是正确的,但是当进入这个场景时游戏崩溃并返回一个以 EXC_ARITHMETIC 开头的绿色错误。我自学数组,不知道我做错了什么?

.h

#import <SpriteKit/SpriteKit.h>
@interface EndScene : SKScene{
NSMutableArray *TextArray;
}
@end

.m

#import "EndScene.h"
#import "MyScene.h"
SKLabelNode *myLabel;

@implementation EndScene
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.scaleMode = SKSceneScaleModeAspectFill;
self.backgroundColor = [SKColor blackColor];
[self setupLabel];
[self RandomText];
[self loadText];
}
return self;
}

- (void) RandomText
{
int randomNumber = arc4random() % TextArray.count;
myLabel.text = [NSString stringWithFormat:@"%@",[TextArray   objectAtIndex:randomNumber]];
}

- (void) loadText
{
TextArray = [[NSMutableArray alloc] init];
[TextArray addObject:@"End Of Game Text"];
[TextArray addObject:@"End Text 2"];
}

-(void) setupLabel{
myLabel = [SKLabelNode labelNodeWithFontNamed:@"Academy Engraved LET"];
myLabel.fontSize = 44;
myLabel.zPosition = 0;
myLabel.position = CGPointMake(390, 660);
[self addChild:myLabel];
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

SKScene *myScene = [[MyScene alloc]initWithSize:self.size];
SKTransition *doors = [SKTransition crossFadeWithDuration:5];
[self.view presentScene:myScene transition:doors];
}

@end

【问题讨论】:

  • 它在哪一行崩溃?

标签: xcode nsmutablearray sprite-kit sklabelnode


【解决方案1】:

问题可能是由于您的NSMutableArray 在执行此行时未定义:

int randomNumber = arc4random() % TextArray.count;

如果数组计数为零,您可能还会遇到算术错误,这将导致通过模计算被零除。

快速解决方法是像这样在 init 中重新排序方法调用:

self setupLabel];
[self loadText]; // now the array is defined
[self RandomText];

这是一个很好的例子,说明您希望了解您的调试器。您实际上可以检查属性/变量的值,例如您的TextArray,并轻松查看是否未定义某些内容或不是您所期望的。

【讨论】:

  • 不好的原因是因为% 0是不允许的。 % 返回除法后的余数,所以要求 % 0 就像问“除以 0 后的余数是多少?”我敢肯定你可以看到这是一件坏事......
  • 是的,我也添加了。在这种情况下,甚至没有根据我们上面看到的代码定义数组。不太确定在那种情况下会发生什么,但我可以看到在这两种情况下都会发生这种性质的事情。 (未定义或零)
  • 谢谢!非常!这很简单......调试器是你的权利。您能否建议一个特定的教程或链接、书籍等。这将详细解释数组和 arc4random。我想更好地了解我在做什么。
  • @prototypical:实例变量是 nil-initialized,所以 TextArray 返回 0 进行计数。
  • @anyvn22 - TextArray 在调用 RandomText 时未初始化。如果未初始化,它会返回 0 吗?他的电话排序将解决这个问题。但是,它不能解决零的情况。但只要loadText 先行,这段代码就可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多