0

我有这个代码:

   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],它基本上设置并绘制一个是和一个无 UIButton,并根据用户按下的内容更改“userAnswer”变量。

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

我知道在 StackOverflow 上有类似问题的答案,但我就是无法对它们做出正面或反面。有人可以为一个非常新的 OO 程序员解释一下吗?

4

1 回答 1

1

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

于 2012-07-25T02:05:06.820 回答