0

私はこれを達成するために多くのことを試みて失敗したので、私はここで一種のピクルスになっています。

私がやりたいこと:クイズのラウンドへの質問に対する答えであるNSStringがアプリにあります。私の回答はNSMutableArrayに保存されます。これらの答えはランダムに選ばれます。私のアプリには、ラウンドのオプション(可能な回答)である4つのボタンがあります。複数の答えはしたくない!

私が試したこと:

  1. ボタンの1つに保存した後で回答を削除して、再度選択できないようにしましたが、高速列挙(forループ)を使用して配列内のオブジェクトを削除しようとしたため、クラッシュが発生しました。
  2. 特定のボタンに正解を設定した後、ボタンのタイトルが答えと等しいかどうかを検出しようとしましたが、奇妙な理由(クラッシュなし)で機能しませんでした。同じ答えのボタンが複数あります

ヘルプが必要なこと:クイズに明確な回答が表示されないように、回答が複数のボタンに表示されないようにするにはどうすればよいですか?

代わりに何をすべきですか?

ありがとう!

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];
    }
}
}
4

2 に答える 2

1

すべての回答を含むNSArrayがあり、1つの正解と3つの異なる不正解が必要な場合は、次のように実行できます。

  1. どのボタンで正しい答えが欲しいかを決めてください。(ランダム化)
  2. 配列からランダムな回答を取得し、その回答のインデックスを一時的な配列に格納します。
  3. 別のランダムな回答を取得し、一時配列にあるものと同じインデックスを持つ回答を選択していないことを確認します(また、新しいインデックスを一時配列に格納します)
于 2011-12-12T08:56:46.427 に答える
0

==を使用して文字列を比較しないでください。これはポインタアドレスを比較します。isEqualToString:代わりに使用してください:

if (stringA == stringB)

通常は機能しません(一部の定数文字列では機能します)

if ([stringA isEqualToString:stringB])

常に動作します。

于 2011-12-11T21:41:29.240 に答える