わかりましたので、最近、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];
}
ありとあらゆる助けをいただければ幸いです。答えが明らかである場合は申し訳ありません。