Ios EXC\u错误\u访问字符串格式
这种方法有什么问题Ios EXC\u错误\u访问字符串格式,ios,objective-c,exc-bad-access,Ios,Objective C,Exc Bad Access,这种方法有什么问题 - (void)randomInteger { count = (arc4random() % 5000) + 5000; NSString *countString = [NSString stringWithFormat:@"%i", count]; if([countString rangeOfString:@"0"].location != NSNotFound && [countString rangeOfString:@"1
- (void)randomInteger {
count = (arc4random() % 5000) + 5000;
NSString *countString = [NSString stringWithFormat:@"%i", count];
if([countString rangeOfString:@"0"].location != NSNotFound && [countString rangeOfString:@"1"].location != NSNotFound && [countString rangeOfString:@"2"].location != NSNotFound && [countString rangeOfString:@"3"].location != NSNotFound) {
score.text = [NSString stringWithFormat:@"%i", count];
} else {
[self randomInteger];
}
}
count
是使用以下命令声明的整数,int count=0代码>。我在第3行收到一个EXC_BAD_访问错误。我相信这是通过该方法第二次发生的,因为如果我注释掉[self randomInteger]代码>没有抛出错误消息。由于递归,它可能使用了太多的堆栈空间
试试这个
- (void)randomInteger {
while (true) {
int count = arc4random_uniform(5000) + 5000;
NSString *countString = [NSString stringWithFormat:@"%i", count];
if([countString rangeOfString:@"0"].location != NSNotFound &&
[countString rangeOfString:@"1"].location != NSNotFound &&
[countString rangeOfString:@"2"].location != NSNotFound &&
[countString rangeOfString:@"3"].location != NSNotFound) {
score.text = countString;
break;
}
}
}
由于递归,它可能使用了太多的堆栈空间
试试这个
- (void)randomInteger {
while (true) {
int count = arc4random_uniform(5000) + 5000;
NSString *countString = [NSString stringWithFormat:@"%i", count];
if([countString rangeOfString:@"0"].location != NSNotFound &&
[countString rangeOfString:@"1"].location != NSNotFound &&
[countString rangeOfString:@"2"].location != NSNotFound &&
[countString rangeOfString:@"3"].location != NSNotFound) {
score.text = countString;
break;
}
}
}
由于递归,它可能使用了太多的堆栈空间
试试这个
- (void)randomInteger {
while (true) {
int count = arc4random_uniform(5000) + 5000;
NSString *countString = [NSString stringWithFormat:@"%i", count];
if([countString rangeOfString:@"0"].location != NSNotFound &&
[countString rangeOfString:@"1"].location != NSNotFound &&
[countString rangeOfString:@"2"].location != NSNotFound &&
[countString rangeOfString:@"3"].location != NSNotFound) {
score.text = countString;
break;
}
}
}
由于递归,它可能使用了太多的堆栈空间
试试这个
- (void)randomInteger {
while (true) {
int count = arc4random_uniform(5000) + 5000;
NSString *countString = [NSString stringWithFormat:@"%i", count];
if([countString rangeOfString:@"0"].location != NSNotFound &&
[countString rangeOfString:@"1"].location != NSNotFound &&
[countString rangeOfString:@"2"].location != NSNotFound &&
[countString rangeOfString:@"3"].location != NSNotFound) {
score.text = countString;
break;
}
}
}
integer
不是实数类型。显示如何真正声明count
。count
的类型是什么<代码>整数
或其他东西?使用以下语句声明,整数计数=0代码>只是为了确保-在声明计数时没有星号(*
)?顺便问一下-为什么要使用递归而不是简单的循环来生成随机数,直到它满足您的条件为止?整数
不是实数类型。显示如何真正声明count
。count
的类型是什么<代码>整数
或其他东西?使用以下语句声明,整数计数=0代码>只是为了确保-在声明计数时没有星号(*
)?顺便问一下-为什么要使用递归而不是简单的循环来生成随机数,直到它满足您的条件为止?整数
不是实数类型。显示如何真正声明count
。count
的类型是什么<代码>整数
或其他东西?使用以下语句声明,整数计数=0代码>只是为了确保-在声明计数时没有星号(*
)?顺便问一下-为什么要使用递归而不是简单的循环来生成随机数,直到它满足您的条件为止?整数
不是实数类型。显示如何真正声明count
。count
的类型是什么<代码>整数
或其他东西?使用以下语句声明,整数计数=0代码>只是为了确保-在声明计数时没有星号(*
)?顺便问一下-为什么要使用递归而不是简单的循环来生成随机数,直到它满足您的条件?另外,最好使用arc4random\u uniform(5000)
而不是arc4random()%5000
。是的,这很有效!好奇为什么。。。?我还编辑了您的答案以使用我的逻辑,==NSNotFound
生成所需的数字可能需要多次迭代,使用递归将使用过多的堆栈空间,并导致堆栈溢出错误。@user3558410简单循环(在这个答案中)和递归循环之间存在巨大差异(您的原始代码)。递归循环需要在每次迭代时重新创建堆栈。由于您的代码可以在找到匹配项之前忽略数百个可能的值,因此系统耗尽了堆栈空间。非常感谢!@rmaddyal因此最好使用arc4random\u uniform(5000)
而不是arc4random()%5000
。是的,这很有效!很好奇为什么…?我还编辑了您的答案以使用我的逻辑,==NSNotFound
生成所需的数字可能需要多次迭代,使用递归将使用太多的堆栈空间并导致堆栈溢出错误。@user3558410简单的循环(在此答案中)和递归循环(您的原始代码)。递归循环需要在每次迭代时重新创建堆栈。由于您的代码可以在找到匹配项之前忽略数百个可能的值,因此系统耗尽了堆栈空间。非常感谢!@rmaddyal因此最好使用arc4random\u uniform(5000)
而不是arc4random()%5000
。是的,这很有效!很好奇为什么…?我还编辑了您的答案以使用我的逻辑,==NSNotFound
生成所需的数字可能需要多次迭代,使用递归将使用太多的堆栈空间并导致堆栈溢出错误。@user3558410简单的循环(在此答案中)和递归循环(您的原始代码)。递归循环需要在每次迭代时重新创建堆栈。由于您的代码可以在找到匹配项之前忽略数百个可能的值,因此系统耗尽了堆栈空间。非常感谢!@rmaddyal因此最好使用arc4random\u uniform(5000)
而不是arc4random()%5000
。是的,这很有效!很好奇为什么…?我还编辑了您的答案以使用我的逻辑,==NSNotFound
生成所需的数字可能需要多次迭代,使用递归将使用太多的堆栈空间并导致堆栈溢出错误。@user3558410简单的循环(在此答案中)和递归循环(您的原始代码)。递归循环需要在每次迭代时重新创建堆栈。由于您的代码可以在找到匹配项之前忽略数百个可能的值,因此系统耗尽了堆栈空间。非常感谢!@rmaddy