访问NSArray的随机元素时EXC_ARITHMETIC

时间:2012-12-11 01:33:32

标签: objective-c

我试图随机获取数组的值,但是我收到了错误 这是我目前的代码:

NSMutableArray *validMoves = [[NSMutableArray alloc] init];

for (int i = 0; i < 100; i++){
    [validMoves removeAllObjects];

    for (TileClass *t in tiles ) {
        if ([self blankTile:t] != 0) {
            [validMoves addObject:t];
        }
    }

    NSInteger pick = arc4random() % validMoves.count;

    [self movePiece:(TileClass *)[validMoves objectAtIndex:pick] withAnimation:NO];
}

1 个答案:

答案 0 :(得分:11)

您得到的错误(算术异常)是因为validMoves为空,当您执行模数运算时,这会导致除以零。

您必须明确检查空validMoves数组的大小写。 此外,您应该使用arc4random_uniform来避免模偏差。

if (validMoves.count > 0) {
    NSInteger pick = arc4random_uniform(validMoves.count);
    [self movePiece:(TileClass *)[validMoves objectAtIndex:pick] withAnimation:NO];
} else {
   // no valid moves, do something reasonable here...
}

最后评论不是arc4random_uniform(0)返回0,因此应避免这种情况,或者您将尝试访问空数组的第一个元素,这当然会使您的应用程序崩溃