2

iOS 6 でのみ問題が発生しています。
このコードは、他のすべてのバージョンで機能します。
警告は表示されません。

コードが条件に入らないだけifです。NSLog が buttonTitle の値を「Select Goal」として正しく表示しても、文字列
と比較することはできません。present.titleSelect Goal

- (void)actionSheet:(UIActionSheet *)presentSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    NSString *buttonTitle=[presentSheet buttonTitleAtIndex:buttonIndex];
    NSLog(@"button title  is %@", buttonTitle);

    actionSheet.delegate =self;
    if (presentSheet.title == @"Select Goal") {
        self.goalsTextField.text =buttonTitle;
        [self.goalsTextField resignFirstResponder];

    }

    if (presentSheet.title ==@"Select Level") {
        self.levelTextField.text =buttonTitle;
        [self.levelTextField resignFirstResponder];

    }

 }
4

3 に答える 3

1

==を使用して文字列比較を行わないでください。isEqualToString:

于 2012-09-22T21:37:45.340 に答える
0

を使用して文字列値を比較することはできません==。NSStringオブジェクトを比較しようとしており、presentSheet.title == @"Select Goal"オブジェクトポインタを比較している ようにステートメントを記述しています(つまり、メモリの場所は常に同じではありません。おそらく実際にはほとんどありません)。比較していると思われる文字列値。

文字列値を比較するには、NSStringメソッドがあります。必要なものは次のとおりです。

if([presentSheet.title isEqualToString:@"Select Goal"])

それはそれをする必要があります。

于 2012-09-23T08:03:32.373 に答える
0

なぜ比較が失敗するのかわかりませんが、興味がありますUIActionSheet+Blocksか? コードの変更が非常に脆弱であり、ボタンの実行時の引数チェックがややこしいという理由だけで、私は常にかなりお粗末なコールバック API を使用することを検討UIAlertViewしてきました。UIActionSheet

UIAlertView+BlocksまたUIActionSheet+Blocks、ユーザーに提示するオプションをより簡単に動的に決定できるブロックベースの API を提供しますが、さらに重要なのは、ユーザーが選択を行ったときに何が起こるべきかについてブロックを実行することです。この API make は、開発者にとって非常に壊れやすく、エラーが発生しにくいものです。また、View Controller に複数のアラートとアクション シートがある場合に、条件付きコーディングを行う必要がないようにします。全体的に、それは純粋な勝利です。なぜ Apple が UIKit でブロックベースの API を作成しなかったのか、私は非常に困惑しています。

于 2012-09-22T21:27:31.507 に答える