在setTitle中有NSMutableArray

时间:2013-12-21 14:06:43

标签: objective-c

我在1-4的NSMutableArray中存储了4个唯一的数字。我已经通过使用此代码完成了这项工作:

    storeArray = [[NSMutableArray alloc] init];
    BOOL record = NO;
    int x;

    for (int i=1; [storeArray count] < 4; i++) //Loop for generate different random values
    {
        x = arc4random() % 4;//generating random number
        if(i==1)//for first time
       {
            [storeArray addObject:[NSNumber numberWithInt:x]];
        }
        else
        {
            for (int j=0; j<= [storeArray count]-1; j++)
            {
               if (x ==[[storeArray objectAtIndex:j] intValue])
                    record = YES;
            }

            if (record == YES)
            {
                record = NO;
            }
            else
            {
                [storeArray addObject:[NSNumber numberWithInt:x]];
            }
        }
    }

然后我可以使用storeArray [1]打印出数字等等。

问题是我想在这里打印数字。

[option1 setTitle:questions[r][storeArray[0]] forState: UIControlStateNormal];
[option2 setTitle:questions[r][storeArray[1]] forState: UIControlStateNormal];
[option3 setTitle:questions[r][storeArray[2]] forState: UIControlStateNormal];
[option4 setTitle:questions[r][storeArray[3]] forState: UIControlStateNormal];

我怎么能这样做?因为当我这样做时我得到线程sigbrt错误?

1 个答案:

答案 0 :(得分:0)

问题是您的算法有问题,并且当发生冲突时因为您试图保持数字唯一,您不会记录任何内容,因此您的数组可能并不总是预期的长度。实际上,你的情况有91%的可能发生这种情况,所以它看起来一直都在发生。

不要尝试编写自己的算法,只需使用现有的类。只需使用NSSet即可保证数组中数字的唯一性。

NSMutableSet *set = [[NSMutableSet alloc] init];
while(set.count < 4) {
  int x = arc4random() % 4;
  [set addObject:[NSNumber numberWithInteger:x]];
}

NSArray * storeArray = [set allObjects];