配列を初期化しておらず (1 行目)、未使用のメモリを指しています。そのはず
NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
あなたがしていることは、nil
どちらが安全かを指し示すこととは異なります。もしあなたがやっていたら
NSMutableArray *numbersArray = nil;
配列は常に空であることがわかります。なぜなら、配列は何も起こらないようにメッセージを送信していたからですnil
(たとえば、オブジェクトを追加してもまったく何も起こりnil
ません)。
更新(編集後):
あなたのコードは正常に動作します。あなたはおそらくそれが何をしているのか理解していません。
最初の数行で、34 個の値を持つ配列が作成されます。-1
NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
for (int i = 0; i<34; i++) {
numbersArray[i] = [NSNumber numberWithInt:-1];
}
次に、1 つの整数値を 0 から 33 の間でランダム化します
int r = rand()%34;
そして、すべての-1の配列にその数値が含まれている間、新しい数値をランダム化します。
最初の数値は正で、配列はすべて -1 で満たされているため、ループの本体に入ることはなく、コードはそれをステップオーバーします。
while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
r = rand()%34;
}
あなたが何をしようとしているのか本当に理解できませんが、これがあなたのコードが現在行っていることです。(動作しますが、まったく無意味です)