因爲我已經嘗試了很多事情來完成這個並且失敗了,所以我在這裏做了一個泡菜。防止選擇NSMutableArray中的某些對象?
我想要做什麼:我在我的應用程序中有一個NSString,這是在測驗中回答問題的答案。我的答案存儲在一個NSMutableArray中。這些答案是隨機選擇的。 我在我的應用程序中有4個按鈕,這是本回合的選項(可能的答案)。我不想有多個答案!
我曾嘗試:
- 我試圖將它存儲在這樣它不能再選擇其中一個按鈕之後刪除了答案,但它最終導致飛機墜毀,因爲我試圖在使用快速枚舉(for循環)時刪除數組中的對象。
- 我試過只是檢測按鈕標題是否等於答案設置正確的答案後,特定的按鈕,但沒有工作的一些奇怪的原因(沒有崩潰)。仍將有多個按鈕具有相同的答案
我需要幫助:我應該如何停止的答案從多個按鈕是使測驗沒有顯示明顯的答案?
我該怎麼做呢?
謝謝!
編輯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];
}
}
}
也許你只是想[洗牌數組](http://stackoverflow.com/questions/56648/whats-the-best-way-to-shuffle-an-nsmutablearray)? – kennytm
與挑選隨機索引然後從該索引獲取對象有何不同? –
你不能保證隨機索引是唯一的。 – kennytm