iOS应用程序在for循环结束时崩溃

时间:2014-06-24 13:55:29

标签: ios objective-c for-loop

我对Objective C很新,我在代码中遇到了很多障碍...... 我正在制作一个(非常)简单的纸牌游戏,可以在iOS上运行。所有你应该做的是抽奖卡,直到小丑被抽出,然后游戏结束。 我的应用程序在for循环结束时在大括号中崩溃,使得卡对象放入数组

这是我的Deck.m:

#import "Deck.h"
#import "Card.h"
@implementation Deck
@synthesize deckArray;

- (void)removeCard {
    [deckArray removeObjectAtIndex:deckArray.count];
}

- (void)generate {
    NSLog(@"Generating deck...");
    NSMutableArray *deckArray = [[NSMutableArray alloc]init];
    for (int i = 0; i < 14; i++) {
        //Make a card
        Card *card = [[Card alloc]init];
        //Give it some values
        card.value = i + 1;
        card.suit = @"Hearts";
        //Put card in array
        [deckArray addObject:card];
        NSLog(@"Added object (%@) to array",card);
    }

    for (int i = 0; i < 14; i++) {
        //Make a card
        Card *card = [[Card alloc]init];
        //Give it some values
        card.value = i + 1;
        card.suit = @"Spades";
        //Put card in array
        [deckArray addObject:card];
        NSLog(@"Added object (%@) to array",card);
    }

    for (int i = 0; i < 14; i++) {
        //Make a card
        Card *card = [[Card alloc]init];
        //Give it some values
        card.value = i + 1;
        card.suit = @"Diamonds";
        //Put card in array
        [deckArray addObject:card];
        NSLog(@"Added object (%@) to array",card);
    }

    for (int i = 0; i < 14; i++) {
        //Make a card
        Card *card = [[Card alloc]init];
        //Give it some values
        card.value = i + 1;
        card.suit = @"Clubs";
        //Put card in array
        [deckArray addObject:card];
        NSLog(@"Added object (%@) to array",card);
    }  //Crashes on this line: Thread 1: Breakpoint 2.1
NSLog(@"Generated deck");
}

- (Card *)topCard {
    return [deckArray objectAtIndex:deckArray.count];
}
@end

我很确定这是世界上最明显的事情,但同样,我在编程方面还很陌生

提前谢谢!

3 个答案:

答案 0 :(得分:0)

我可以在两种方法中看到问题:removeCard和topCard。 您尝试访问超出范围的对象:

[deckArray objectAtIndex:deckArray.count]

如果数组中有5个项目,则deckArray.count返回5但最后一个索引为4(数组索引为零),因此您必须将对deckArray.count的调用替换为deckArray.count-1。

- (Card *)topCard {
    return [deckArray objectAtIndex:deckArray.count-1];
}

在removeCard方法中也这样做。

答案 1 :(得分:0)

这一行:NSMutableArray *deckArray = [[NSMutableArray alloc]init];

您已在头文件(.h)中声明了deckArray。 你应该这样做:deckArray = [[NSMutableArray alloc] init];

答案 2 :(得分:0)

正如Crash日志中所说,我的'删除卡'方法带走了一个不存在的对象,因为数组是从零开始的。另外,我将self.放在deckArray前面似乎有所帮助。在发布这个问题之前我应该​​学习更多的Obj-C,所以我向你道歉。 .count - 1也对其他方法有所帮助。