好的,所以我最近决定尝试自学 Objective-C(我对 iPhone 开发感兴趣),但是我以前从未使用过 C 或其任何衍生产品,因此遇到了一些问题。我决定从编写一个非常基本的卡片应用程序开始,它创建一副卡片,洗牌,然后使用 UIButtons 在屏幕上显示卡片,但是我的洗牌算法有问题。每次调用它时,我都会收到一个 EXC_BAD_ACCESS 错误,我知道这意味着我的代码存在严重错误,但我就是不知道它是什么。
- (void) randomize {
NSMutableArray *tmpDeck = [[NSMutableArray alloc] init];
for(Card *tmp in _cards) {
BOOL didInsert = NO;
while(!didInsert) {
NSUInteger random = arc4random_uniform(54);
if([[tmpDeck objectAtIndex:random] isEqual:nil]) {
[tmpDeck insertObject:tmp atIndex:random];
didInsert = YES;
}
}
}
_cards = tmpDeck;
_hasBeenRandomized = YES;
}
_cards 是指向 NSMutableArray 的指针,其中包含未洗牌的卡片对象,而 _hasBeenRandomized 是一个布尔值(显然),用于跟踪卡片组是否已随机化。
我试图使用调试器来弄清楚这里到底发生了什么,但我什至无法在程序崩溃的情况下进入该方法。这使我相信问题必须来自第一行,但这只是 NSMutableArray 的直接创建,所以我不知道它是怎么回事。此方法是从 viewDidLoad 中调用的。这是当前 viewDidLoad 方法的全部。
- (void)viewDidLoad
{
[super viewDidLoad];
_deck = [[Deck alloc] init];
[_deck randomize];
}
任何和所有的帮助将不胜感激。对不起,如果答案很明显。