私はこれを達成するために多くのことを試みて失敗したので、私はここで一種のピクルスになっています。
私がやりたいこと:クイズのラウンドへの質問に対する答えであるNSStringがアプリにあります。私の回答はNSMutableArrayに保存されます。これらの答えはランダムに選ばれます。私のアプリには、ラウンドのオプション(可能な回答)である4つのボタンがあります。複数の答えはしたくない!
私が試したこと:
- ボタンの1つに保存した後で回答を削除して、再度選択できないようにしましたが、高速列挙(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(answer)と同じ回答を持たないことを確認しようとするメソッドです。
- (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];
}
}
}