objective-c - 暂停 Objective-C 运行时循环以获取用户输入

标签 objective-c ios cocoa-touch runtime

我有这个代码:

   while (!found) {

    char letterGuess=(char)([[[wordList letterRank:lengthOfWord]objectAtIndex:yescount]intValue]+97);
    NSString *stringLetter=[NSString stringWithFormat:@"%c",letterGuess];

    if ([prevGuess count]<=0) {
        alreadyGuessed=NO;
    }else {
        if ([prevGuess containsObject:stringLetter]) {
            alreadyGuessed=YES;
            yescount++;
        }else{
            alreadyGuessed=NO;
        }
    }

    if (!alreadyGuessed) {
        [prevGuess addObject:stringLetter];
        [self drawYesNo];
        NSLog(@"%c",letterGuess);
    }

    if (userAnswer) {

    }else {
        [self noGuess:letterGuess];
    }

    if ([wordList count]<=1) {
        NSLog(@"word found");
        found=YES;
    }

}

基本上,它从已排序的数组中取出一个字母,将其与包含所有先前输入的字母的另一个数组进行检查,如果它不在该数组中,它将调用 [self drawYesNo],这基本上设置和绘制一个 yes 和一个 no UIButton,并根据用户按下的内容更改“userAnswer”变量。

我的问题是这个循环执行得非常快,以至于 objectAtIndex 很快超出了数组的界限,并引发错误。我需要某种方法在 [drawYesNo] 方法期间暂停,并允许用户实际做出决定。

我知道 StackOverflow 上有类似问题的答案,但我就是搞不懂。有人可以为一个非常新的面向对象程序员解释一下吗?

最佳答案

我无法真正弄清楚代码的所有逻辑,但听起来您需要将其重构为不同的方法。您不应该将代码放在 while 循环中,而应该使用一种方法来完成大部分(全部?我不知道)您发布的内容(没有 while 循环)。您在应用程序启动时调用此方法一次,然后在用户单击按钮后 - 在按钮的操作方法中更改 userAnswer 的值,然后再次调用该方法。这种情况会一直持续下去,直到您的按钮方法满足某些条件,导致其停止。

关于objective-c - 暂停 Objective-C 运行时循环以获取用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11641590/

相关文章:

iphone - 如何替换当前打开的 FMDB 数据库并保留当前队列?

iphone - Objective C HTML 转义/取消转义

ios - 函数 '…'的隐式声明在C99上无效

ios - TableViewCell 中元素的动态数量

ios - 如何确定 UIWebView 的内容大小?

iphone - 如何隐藏导航栏中的两个右侧按钮之一

iphone - 有没有办法知道一部 iPhone 与另一部 iPhone 的方向?

objective-c - -[__ NSArrayM objectForKey:]:无法识别的选择器发送到实例Objective c中的错误

ios - 如何在 SwiftUI 中恢复与 UIKit (interactivePopGestureRecognizer) 中相同的行为

ios - 如何删除 iOS 组件中的边框