0

好的,所以我使用 arc4random 从数组中获取随机图像,代码如下:

//ray is the array that stores my images
int pic = arc4random() % ray.count; 
tileImageView.image = [ray objectAtIndex:pic-1];
NSLog(@"Index of used image: %d", pic-1);

我多次调用此代码,它工作了一段时间,但一段时间后它总是因为这个错误而崩溃:

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** - [__NSArrayM objectAtIndex:]: index 4294967295 beyond bounds [0 .. 39]'

我的问题是,为什么会产生这么大的数字?arc4random 函数有问题吗?任何帮助将不胜感激

4

3 回答 3

2

您还可以使用该arc4random_uniform(upper_bound)函数生成一个范围内的随机数。下面将生成一个介于 0 和 73 之间的数字。

arc4random_uniform(74)

arc4random_uniform(upper_bound) 避免了手册页中描述的模偏差:

arc4random_uniform() will return a uniformly distributed random number less than upper_bound. arc4random_uniform() is recommended over constructions like ``arc4random() % upper_bound'' as it avoids "modulo bias" when the upper bound is not a power of two.
于 2011-10-15T23:15:42.143 回答
0

arc4random 返回 0 或 ray.count 的偶数倍数。因此,当您通过 ray.count 对其进行修改时,您会得到 0。然后从中减去 1,得到 -1,这将转换为一个非常大的无符号整数。

于 2011-10-15T23:04:34.433 回答
0

问题在于,因为您的 pic-1 构造会偶尔生成一次 -1(即 4294967295 的无符号形式)。您需要摆脱 pic-1 并简单地使用 pic 代替。

于 2011-10-15T23:10:21.363 回答