2013-12-21 2 views
0

Я сохранил 4 уникальных номера внутри NSMutableArray с 1-4. я сделал это с помощью этого кода:NSMutableArray внутри setTitle

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?

+0

Массивы индексируются начиная с нуля, а не из одного. Если у вас есть четыре элемента в массиве, вы можете получить к ним доступ, используя 'storeArray [0]' через 'storeArray [3]'. – godel9

+0

Как объявляется переменная 'questions'? Было бы полезно, если бы вы разместили трассировку стека вашего SIGABRT. – highlycaffeinated

ответ

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]; 
Смежные вопросы