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 ループなしで) 投稿した内容のほとんど (すべて? 私にはわかりません) を実行する 1 つのメソッドを用意する必要があります。アプリの起動時にこれを 1 回呼び出し、ユーザーがボタンをクリックした後、ボタンのアクション メソッドで userAnswer の値を変更してから、そのメソッドを再度呼び出します。これは、ボタンメソッドで停止する条件が満たされるまで続きます。

于 2012-07-25T02:05:06.820 に答える