我的应用程序有点问题,对这类事情不熟悉,我有点难以弄清楚发生了什么。
我遇到的错误如下
线程1:EXC_BAD_ACCESS(代码= exc_I386_GPFLT)
隐式转换失去整数精度:'NSUInterger'(又名无符号长')到'u_int32'(又名'unsigned int')**已解决*
第一个没有显示为红色或黄色错误,它只是我的代码部分的贪婪文本,显示在下面的“图1”中
第二部分是数组中的黄色错误,用于选择要在UIImageView
中显示的随机图像(图2)
图1
NSArray *imageNameArray = [[NSArray alloc] initWithObjects:@"toppipestyleone.png", "toppipestyletwo.png", "toppipestylethree.png", "toppipestylefour.png", "toppipestylefive.png", nil];
这是我放置UIImageView
的方法里面我也有这个方法中的代码告诉UIImageView
从屏幕的右边滚动到左边,我将把整个方法发布到“图3“
图2
PipeTop.image = [UIImage imageNamed:[imageNameArray objectAtIndex:arc4random_uniform([imageNameArray count])]];
图3
-(void)PlacePipe{
NSArray *imageNameArray = [[NSArray alloc] initWithObjects:@"toppipestyleone.png", "toppipestyletwo.png", "toppipestylethree.png", "toppipestylefour.png", "toppipestylefive.png", nil];
PipeTop.image = [UIImage imageNamed:[imageNameArray objectAtIndex:arc4random_uniform([imageNameArray count])]];
RandomTopPipePosition = arc4random() %350;
RandomTopPipePosition = RandomTopPipePosition - 228;
RandomBottomPipePosition = RandomTopPipePosition + 660;
PipeTop.center = CGPointMake(340-10, RandomTopPipePosition);
randomImagebottom.center = CGPointMake(340-10, RandomBottomPipePosition);
}
我认为第二个错误与32位和64位设备有关,但我找不到针对我确切问题的实际解决方案我读过的大多数问题是关于人们正在使用NSZombies
?我不太清楚它是什么。
答案 0 :(得分:2)
!真正的错误:来自kirsteins: "只有第一个数组对象是NSString @" toppipestyleone.png",所有其他对象都是c字符串文字。你应该在它们之前添加@来制作NSString文字。"
他/她删除了他们的答案,虽然这是对的......
NSArray *imageNameArray = [[NSArray alloc] initWithObjects:@"toppipestyleone.png", @"toppipestyletwo.png", @"toppipestylethree.png", @"toppipestylefour.png", @"toppipestylefive.png", nil];
数组基于零,count-1是最后一个索引。关于警告。施展它:
这样:
NSUInteger index = (NSUInteger)arc4random_uniform((int)[imageNameArray count]-1);
PipeTop.image = [UIImage imageNamed:[imageNameArray objectAtIndex:index]];
答案 1 :(得分:0)
我认为在选择随机数时,计数从数组计数中变高,使用此方法获取数组计数之间的随机索引。
int r = arc4random() % [yourArray count];
if(r<[yourArray count])
obj=[yourArray objectAtIndex:r];
else
{
//error message
}