我有这段代码:
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程序员解释这个吗?
答案 0 :(得分:1)
我无法弄清楚代码的所有逻辑,但听起来你需要将它重构为不同的方法。而不是让代码在while循环中,你应该有一个方法对你发布的内容(没有while循环)做大多数(所有?我无法分辨)。您在应用程序启动时调用此项,然后在用户单击按钮后调用此项 - 在按钮的操作方法中更改userAnswer的值,然后再次调用该方法。这一直持续到你的按钮方法满足某些条件会导致它停止。