Ios 阻止在NSMutableArray中选择某些对象?

Ios 阻止在NSMutableArray中选择某些对象?,ios,nsstring,nsmutablearray,logistics,Ios,Nsstring,Nsmutablearray,Logistics,我在这里有点为难,因为我已经尝试了很多事情来完成这一点,但都失败了 我想做什么:我的应用程序中有一个NSString,它是对测验中某轮问题的答案。我的答案存储在NSMutableArray中。这些答案是随机选择的。我的应用程序中有4个按钮,它们是本轮的选项(可能的答案)。我不想有多重答案 我尝试过的: - (void)checkTitles:(UIButton*)button { if ([[button titleForState:UIControlStateNormal] isEqu

我在这里有点为难,因为我已经尝试了很多事情来完成这一点,但都失败了

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

我尝试过的:

- (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];
    }
}
}
  • 在将答案存储在其中一个按钮中后,我尝试删除该答案,以便无法再次选择它,但最终导致崩溃,因为我在使用快速枚举(for循环)时尝试删除数组中的对象
  • 在为特定按钮设置正确答案后,我尝试检测按钮标题是否与答案相等,但由于某些奇怪的原因(没有崩溃),这没有起作用。仍将有多个按钮具有相同的答案
  • 我需要什么帮助:我应该如何阻止答案出现在多个按钮中,以便测验不会显示明显的答案

    我该怎么做呢

    谢谢

    Edit1:所以我几乎把我的四个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方法看起来像这样,这是我尝试确保其中两个按钮的答案与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];
        }
    }
    }
    

    不要使用==比较字符串。这将比较指针地址。改用
    IsequalString:

    if (stringA == stringB)
    
    通常不起作用(对于某些常量字符串会起作用)


    我会一直工作的

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

  • 决定你想在哪个按钮上得到正确答案。(随机化)
  • 从数组中获取随机答案,并将该答案的索引存储在临时数组中
  • 获取另一个随机答案,并确保所选答案的索引与临时数组中的索引相同(再次,将新索引存储在临时数组中)

  • 也许你只是想?这与选择一个随机索引然后从该索引中获取对象有什么不同?你不能保证随机索引是唯一的。所以洗牌可以保证它是唯一的?不,洗牌使你不需要使用随机索引(假设NSMutableArray的长度为4,对应于你将显示的4个答案).在第二段代码中,这就是你的意思吗?这个问题还有其他例子吗?是的,当你检查按钮标题时。好的,现在检查,我试过了,我的3个按钮没有标题!我不确定您是否应该删除标题按钮中的==nil。isEqualToString在这种情况下不匹配。好的,我重新编辑了它。但现在我还能在哪里做IsqualString呢?我看不出还有什么地方可以这样做了。#1是我目前正在做的,但不起作用。所以,也许2和3的组合对我有用,我以后再试试看!)您还应该将已有答案的按钮保存在另一个数组中。。。