阵列洗牌不起作用,客观C

时间:2011-11-15 21:43:43

标签: objective-c cocoa-touch

我有两个动画阵列,一个是“之前”动画,一个是“之后”动画,需要在我的动画块中一起使用。我想随机化它们执行的顺序。我创建了一个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];

我正在使用this category to randomize the array,然后是:

 [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]];

等。我不仅仅使用“动画:[动画objectAtIndex:[数字objectAtIndex:0]]的原因是因为编译器向”NSUInteger“类型的参数抛出”不兼容的指向整数转换发送类型'id'的指针(又名'unsigned int')“当我这样做的时候,我尝试通过输入原始的int作为无符号的int来解决但在那里没有运气。

代码没有给我任何错误,一切运行得很好,除了没有任何随机化;但它按照我把所有东西放在首位的顺序。关于我哪里出错的任何想法?我尝试过其他一系列随机函数,似乎没什么用。

2 个答案:

答案 0 :(得分:2)

根据您发布的代码,您似乎没有将返回的NSArray存储在任何地方。也就是说,shuffledArray不会将数组移动到位,它会返回一个新的混洗数组。确保存储它:

numbers = [numbers shuffledArray];

编辑:如果将返回的数组存储在numbers中,请确保将其释放或将其设置为自动重新发布,除非您使用的是ARC。

答案 1 :(得分:2)

shuffledArray不会改组数组:返回一个混洗数组。您没有捕获返回的结果。所以:

NSArray* result = [numbers shuffledArray];

现在结果将被洗牌。