перестановка массива не работает, цель C - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть два массива анимаций, одна анимация «до» и одна анимация «после», которые должны объединяться в моих блоках анимации. Я хочу рандомизировать порядок, в котором они выполняются. Я создал массив чисел 0-3, вот так:

NSNumber *w = [NSNumber numberWithUnsignedInt: 0];
NSNumber *x = [NSNumber numberWithUnsignedInt: 1];
NSNumber *y = [NSNumber numberWithUnsignedInt: 2];
NSNumber *z = [NSNumber numberWithUnsignedInt: 3];
NSArray *numbers = [[NSArray alloc] initWithObjects: w, x, y, z, nil];

Я использую эту категорию для рандомизации массива , а затем:

 [numbers shuffledArray];

Затем у меня есть другой набор целых чисел, которые я использую, чтобы получить числа в теоретически перетасовке, и использую их в своих анимационных блоках:

int ww = [[numbers objectAtIndex:0] integerValue];
int xx = [[numbers objectAtIndex:1] integerValue];
int yy = [[numbers objectAtIndex:2] integerValue];
int zz = [[numbers objectAtIndex:3] integerValue];

[UIView animateWithDuration:.85 delay:3 options:opts animations:[animations objectAtIndex:ww] completion:[completions objectAtIndex:ww]];
[UIView animateWithDuration:.85 delay:8 options:opts animations:[animations objectAtIndex:xx] completion:[completions objectAtIndex:xx]];

и т.д.. Причина, по которой я не просто использую "animations: [animations objectAtIndex: [numbers objectAtIndex: 0]], заключается в том, что компилятор генерировал" несовместимый указатель на целочисленное преобразование, отправляющее тип "id" на параметр типа "NSUInteger" (иначе 'unsigned int') "когда я сделал это таким образом, я попытался исправить это, введя оригинальные целые как неподписанные, но не повезло.

Код не дает мне ошибок, и все работает просто отлично, за исключением того, что ничего не рандомизировано; но это в том порядке, в котором я поставил все на первое место. Есть идеи, где я иду не так? Я перепробовал кучу других функций рандомизации, но, похоже, ничего не работает.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

shuffledArray не перемешивает массив: он возвращает перемешанный массив. Вы не фиксируете полученный результат. Итак:

NSArray* result = [numbers shuffledArray];

Теперь результат будет перетасован.

2 голосов
/ 16 ноября 2011

Из кода, который вы разместили, похоже, вы не храните возвращенные NSArray нигде. То есть shuffledArray не перетасовывает массив на месте, он возвращает новый перетасованный массив. Убедитесь, что вы храните его:

numbers = [numbers shuffledArray];

РЕДАКТИРОВАТЬ: если вы сохраняете возвращенный массив в numbers, убедитесь, что вы освободили его или установили его на автоматический выпуск, если только вы не используете ARC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...