Почему номер 2 не работает в этом цикле? - PullRequest
1 голос
/ 25 апреля 2010

У меня есть функция, которая запускается через каждый элемент в массиве. Это сложно объяснить, поэтому я просто вставлю код здесь:

NSLog(@"%@", arraySub);

for (NSNumber *favoriteThing in arrayFav){  

    int favoriteLoop = [favoriteThing intValue] + favCount;
    NSLog(@"%d", favoriteLoop);

    id arrayFavObject = [array objectAtIndex:favoriteLoop];
    [arrayFavObject retain];
    [array removeObjectAtIndex:favoriteLoop];
    [array insertObject:arrayFavObject atIndex:0];
    [arrayFavObject release];

    id arraySubFavObject = [arraySub objectAtIndex:favoriteLoop];
    [arraySubFavObject retain];
    [arraySub removeObjectAtIndex:favoriteLoop];
    [arraySub insertObject:arraySubFavObject atIndex:0];
    [arraySubFavObject release];

    id arrayLengthFavObject = [arrayLength objectAtIndex:favoriteLoop];
    [arrayLengthFavObject retain];
    [arrayLength removeObjectAtIndex:favoriteLoop];
    [arrayLength insertObject:arrayLengthFavObject atIndex:0];
    [arrayLengthFavObject release];

}

NSLog(@"%@", arraySub);

Массив arrayFav содержит следующие числа: 3, 8, 2, 10, 40. Массив array содержит 92 строки с именем. Массив arraySub содержит числа от 0 до 91, представляющие имя файла с заголовком из массива array. Массив arrayLength содержит 92 строки, представляющие размер каждого файла из массива arraySub.

Теперь первый NSLog показывает, как и ожидалось, цифры от 0 до 91. NSLog -s в цикле показывают числа 3, 8, 2, 10, 40, также как и ожидалось.

Но вот странная часть: последняя NSLog показывает эти числа: 40, 10, 0, 8, 3, 1, 2, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91

это 40, 10, 0 , 8, 3 и т. Д.

Там не должно было быть нуля, это должно было быть 2 ..

У вас есть идея, почему это происходит или как это исправить? Спасибо.

РЕДАКТИРОВАТЬ: Код был изменен. arrayFav теперь содержит числа.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2010

Метод -intValue возвращает 0 , если есть что-то напуганное в начале преобразуемой строки.

Вместо использования NSString для хранения целых чисел, попробуйте использовать NSNumber для принудительного хранения чисел в вашем массиве или отладки того, что отправляется в сообщении -intValue.

0 голосов
/ 28 апреля 2010

Я исправил это, удалив цикл for и просто выполнил поиск правильного местоположения в массиве Subs.

// If the object is not really the object we want, get what we want
if (favoriteLoop != [[[arraySub objectAtIndex:favoriteLoop] description] intValue]){
    favoriteLoop = [arraySub indexOfObject:[NSString stringWithFormat:@"%d", favoriteLoop]];
}         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...