-2

私はデリゲートメソッドを実装しています:

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

アプリケーションで以下のコードを使用しています。ただし、警告が表示されますが、その理由はわかりません。私のコードは次のとおりです。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

        if (textField.tag == 1) {

            if(blah blah blah)
                return YES;

            //more code

            if (blah blah) {

                //more code

            }

            else if (blah blah) {

                //more code;

            }

            else if (blah blah blah) {

                //more code

            }


            //even more code

            return NO;

        }

        else if (textField.tag == 2){

            if(textField.text.length > 1) {

                return NO;

            }

            return YES;

        }

        else if (textField.tag == 3) {

            if(textField.text.length > 2) {

                return NO;

            }

            return YES;

        }


    }

私が得ている警告は次のとおりです。

「コントロールは非 void 関数の終わりに到達する可能性があります。」各 "if" 句の最後に戻り値があるのに、なぜこの警告が引き続き表示されるのですか?

4

5 に答える 5

2

関数の戻り値の型は void put ではなく BOOL であるため、関数はブール値を受け取る必要があります。

return YES; 

shouldChangeCharactersInRange:()条件付き/反復ステートメントの外側のメソッドの最後。

その後、警告が表示されます。

于 2013-03-29T05:03:02.077 に答える
2

各「if」句の最後に戻り値があります

いいえ、あなたはしません。最後のelseブランチは実装されていません。

于 2013-03-29T05:08:39.813 に答える
0

return YES/NO;メソッドの最後に追加します。あなたの問題を解決するかもしれません。あなたのいずれかが
if - condition - Block実行されていない場合、このメソッドには戻り値がないためです。

于 2013-03-29T05:04:27.507 に答える
0

コンパイラはtextfield.tag、1、2、3 のいずれでもない場合、戻り値がないことを認識しています。関数の最後に return YES/NO を追加します。

于 2013-03-29T05:07:05.590 に答える
0

これを使ってみてください...

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    {
        if (textField.tag == 1)
        {

          if(blah blah blah)
            return YES;

        //more code

          if (blah blah)
          {

            //more code

          }

          else if (blah blah)
          {

            //more code;

          }

          else if (blah blah blah)
          {

            //more code

          }


         //even more code

         return NO;

        }

        else if (textField.tag == 2)
        {

         if(textField.text.length > 1) 
         {

            return NO;

        }

        return YES;

      }

    else if (textField.tag == 3) {

        if(textField.text.length > 2) {

            return NO;

        }

        return YES;

      }

    }
return YES;
}
于 2013-03-29T05:07:11.663 に答える