私はこれを達成するために多くのことを試して失敗して以来、ここでピクルスにいます。NSMutableArrayで特定のオブジェクトを選択できないようにしますか?
私がしたいこと:私はクイズのラウンドへの質問への答えである私のアプリにNSStringを持っています。私の答えはNSMutableArrayに格納されています。これらの回答はランダムに選択されます。 私はラウンドのオプション(可能回答)である私のアプリに4つのボタンがあります。私は複数の答えを持っていたくない!私はそれが再び選択することができませんでしたように、ボタンのいずれかに格納した後、答えを削除しようとしたが、それは私ので、クラッシュを引き起こしてしまった
- :私が試してみました何
高速列挙(forループ)を使用している間に配列内のオブジェクトを削除しようとしていました。
- 私は、特定のボタンに正しい答えを設定した後、ボタンのタイトルが答えに等しいのかどうかを検出しようとしましたが、何らかの奇妙な理由で(クラッシュしない)機能しませんでした。私は助けを必要とどのような同じ答えで、まだ複数のボタン
があります:私はクイズが明白な答えが表示されないように、複数のボタンであることから答えをどのように停止する必要がありますか?
代わりにどうすればよいですか?
ありがとうございます!
Edit1:私は4つのUIButtonのNSArrayを作成しました。
は、私はこのようなランダムUIButtonに答えを置く:私はこれを行う
NSInteger chosen = (arc4random() % 4);
UIButton *randButton = (UIButton *)[buttonArray objectAtIndex:chosen];
[randButton setTitle:imageName forState:UIControlStateNormal];
は、その後、私はそうのような他のボタンは、答えを持っていない私のボタンは何のタイトルを持っているタイトル
: :- (void)titleButtons {
for (UIButton *buttons in buttonArray) {
if ([[buttons titleForState:UIControlStateNormal] == nil]) {
UIButton *button = buttons;
NSString *superheroString = (NSString*)[superheroArray objectAtIndex:(arc4random() % [superheroArray count])];
[button setTitle:superheroString forState:UIControlStateNormal];
[self checkTitles:button];
}
}
その後checkTitle方法は次のようになり、これは、私は2つのボタンはimagenameの(答)と同じ答えを持っていない場所を確認するためにしようとする方法であります
- (void)checkTitles:(UIButton*)button { if ([[button titleForState:UIControlStateNormal] isEqualToString:imageName]) { //Duplicate Answer so re-title button NSString *newTitle = [superheroArray objectAtIndex:(arc4random() % [superheroArray count])]; [button setTitle:newTitle forState:UIControlStateNormal]; //Call same method again to see if new title is still same answer as pic to avoid same answers [self checkTitles:button]; } } }
別のランダムな答えを取得し、あなたがあなたの一時配列を持っているものと同じインデックスに答えを選んでいないことを確認してください(と、再び、一時配列に新しいインデックスを格納します)ちょうど[配列をシャッフルしたい](http://stackoverflow.com/questions/56648/whats-the-best-way-to-shuffle-an-nsmutablearray)? – kennytm
ランダムインデックスを選んでそのインデックスからオブジェクトを取得するのとどのように違いますか? –
ランダムインデックスが一意であることを保証することはできません。 – kennytm