防止在NSMutableArray中选择某些对象?

时间:2011-12-11 05:52:17

标签: ios nsstring nsmutablearray logistics

由于我已经尝试了很多事情来完成这项任务并且失败了,所以我在这里很蠢。

我想做什么:我的应用程序中有一个NSString,它是测验中回合问题的答案。我的答案存储在NSMutableArray中。这些答案是随机选择的。 我的应用程序中有4个按钮,是该轮的选项(可能的答案)。我不想有多个答案!

我尝试了什么:

  1. 我已经尝试将其存储在其中一个按钮中之后删除了答案,因此无法再次选择但最终导致崩溃,因为我在使用快速枚举时尝试删除数组中的对象(对于循环)。
  2. 在设置了特定按钮的正确答案之后,我尝试检测按钮标题是否等于答案,但是由于某些奇怪的原因(没有崩溃)不起作用。仍然会有多个按钮具有相同的答案
  3. 我需要帮助的是什么:如何在多个按钮中停止答案,以便测验没有显示明显的答案?

    我该怎么办?

    谢谢!

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

2 个答案:

答案 0 :(得分:1)

如果您的NSArray包含所有答案,并且您想要1个正确答案和3个不同的错误答案,则可以执行以下操作:

  1. 确定您想要正确答案的按钮。 (随机化)
  2. 从数组中获取随机答案,并将该答案的索引存储在临时数组中。
  3. 获取另一个随机答案并确保您没有选择与您在临时数组中具有相同索引的答案(并再次将新索引存储在临时数组中)

答案 1 :(得分:0)

不要使用==比较字符串。这会比较指针地址。请改用isEqualToString:

if (stringA == stringB)

通常不起作用(将用于某些常量字符串)

if ([stringA isEqualToString:stringB])

永远有效。

相关问题