2011-12-11 10 views
0

私はこれを達成するために多くのことを試して失敗して以来、ここでピクルスにいます。NSMutableArrayで特定のオブジェクトを選択できないようにしますか?

私がしたいこと:私はクイズのラウンドへの質問への答えである私のアプリにNSStringを持っています。私の答えはNSMutableArrayに格納されています。これらの回答はランダムに選択されます。 私はラウンドのオプション(可能回答)である私のアプリに4つのボタンがあります。私は複数の答えを持っていたくない!私はそれが再び選択することができませんでしたように、ボタンのいずれかに格納した後、答えを削除しようとしたが、それは私ので、クラッシュを引き起こしてしまった

  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の(答)と同じ答えを持っていない場所を確認するためにしようとする方法であります

- (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]; } } } 
+0

別のランダムな答えを取得し、あなたがあなたの一時配列を持っているものと同じインデックスに答えを選んでいないことを確認してください(と、再び、一時配列に新しいインデックスを格納します)ちょうど[配列をシャッフルしたい](http://stackoverflow.com/questions/56648/whats-the-best-way-to-shuffle-an-nsmutablearray)? – kennytm

+0

ランダムインデックスを選んでそのインデックスからオブジェクトを取得するのとどのように違いますか? –

+0

ランダムインデックスが一意であることを保証することはできません。 – kennytm

答えて

1

  1. は、あなたが正しい答えをしたいですどのボタンで決定します。(無作為化)
  2. あなたの配列からランダムな答えを得て、その答えのインデックスを一時配列に格納します。
  3. あなたはたぶん
+0

#1は私が現在やっているもので、うまくいきませんでした。だから多分#2と#3を組み合わせると私にとってはうまくいくでしょう、後でそれを試してみてください! :) –

+0

あなたはすでに別の配列にあなたが既に答えを持っているボタンを保存する必要があります... – Peres

0

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

if (stringA == stringB) 

通常動作しません(意志を、いくつかの定数文字列のために)
if ([stringA isEqualToString:stringB]) 

は常に動作します。すべてのあなたの答えをNSArrayのを持っている、とあなたは1つの正解と3種類の間違った答えをしたい場合は、次の操作を行うことができます

+0

の問題点は何ですか?この問題の他の例はありましたか? –

+0

はい、ボタンのタイトルを確認します。 – jrturton

+0

今すぐ確認してみましたが、私のボタンの3つはタイトルがついていません! –

関連する問題