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