2011-12-11 34 views
0

因爲我已經嘗試了很多事情來完成這個並且失敗了,所以我在這裏做了一個泡菜。防止選擇NSMutableArray中的某些對象?

我想要做什麼:我在我的應用程序中有一個NSString,這是在測驗中回答問題的答案。我的答案存儲在一個NSMutableArray中。這些答案是隨機選擇的。 我在我的應用程序中有4個按鈕,這是本回合的選項(可能的答案)。我不想有多個答案!

我曾嘗試:

  1. 我試圖將它存儲在這樣它不能再選擇其中一個按鈕之後刪除了答案,但它最終導致飛機墜毀,因爲我試圖在使用快速枚舉(for循環)時刪除數組中的對象。
  2. 我試過只是檢測按鈕標題是否等於答案設置正確的答案後,特定的按鈕,但沒有工作的一些奇怪的原因(沒有崩潰)。仍將有多個按鈕具有相同的答案

我需要幫助:我應該如何停止的答案從多個按鈕是使測驗沒有顯示明顯的答案?

我該怎麼做呢?

謝謝!

編輯1:所以我幾乎做了我的四個UIButtons的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

如果你有你的答案一個NSArray,並希望1個正確答案和3個不同的錯誤的答案,你可以做到以下幾點:

  1. 決定在哪一個按鈕,你要正確的答案。(隨機化)
  2. 從數組中獲取隨機答案並將該答案的索引存儲在臨時數組中。
  3. 獲取另一個隨機的答案,並確保你沒有選擇的答案用相同的索引在您的臨時數組有一個,(並再次,存儲新的索引臨時陣列中)
+0

#1是我目前正在做的不工作。所以#2和#3的組合可以爲我工作,以後再試試吧! :) –

+0

您還應該在另一個陣列上保存已經有答案的按鈕...... – Peres

0

不要使用==比較字符串。這比較指針地址。使用isEqualToString:代替:

if (stringA == stringB) 

通常將無法正常工作(會爲一些常量字符串)

if ([stringA isEqualToString:stringB]) 

就沒有問題。

+0

的地方在於你的意思?這個問題還有其他的例子嗎? –

+0

是的,當你檢查按鈕標題。 – jrturton

+0

好吧,現在檢查,我試過,我的3個按鈕,然後不得標題! –