【发布时间】:2011-12-11 05:52:17
【问题描述】:
我在这里有点不知所措,因为我尝试了很多方法来实现这一点,但都失败了。
我想做什么:我的应用中有一个 NSString,它是测验中一轮问题的答案。我的答案存储在 NSMutableArray 中。这些答案是随机选择的。 我的应用中有 4 个按钮,它们是该回合的选项(可能的答案)。我不想有多个答案!
我尝试过的:
- 我尝试在将答案存储在其中一个按钮中后删除答案,以便无法再次选择它,但最终导致崩溃,因为我在使用快速枚举时尝试删除数组中的对象(对于循环)。
- 在为特定按钮设置正确答案后,我尝试检测按钮标题是否等于答案,但由于某些奇怪的原因(没有崩溃)不起作用。仍然会有多个按钮具有相同的答案
我需要什么帮助:我应该如何阻止答案出现在多个按钮中,以使测验不会显示明显的答案?
我应该怎么做?
谢谢!
Edit1:所以我几乎用我的四个 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];
}
}
}
【问题讨论】:
-
也许你只是想shuffle the array?
-
这与选择随机索引然后从该索引中获取对象有何不同?
-
不能保证随机索引是唯一的。
-
那么洗牌就能保证吗?
-
不,改组使您无需使用随机索引(假设 NSMutableArray 的长度为 4 对应于您将显示的 4 个答案)。
标签: ios nsstring nsmutablearray logistics