2

iPhone 5 と iOS6 をサポートするためのアプリの更新を終えたところ、奇妙なバグが見つかりました。

iOS5 ではこのコードは正常に動作しますが、すべての iOS6 デバイスでは、ボタンが押されても何も起こらず、デバッガーは buttonTitleAtIndex:buttonIndex を不明なメソッドとして認識します。文字列の代わりに実際の buttonIndex 番号を使用して回避策を作成しましたが、iOS6 でこれのサポートが変更される理由がわからないため、なぜこれが起こるのか混乱しています。

if([actionSheet buttonTitleAtIndex:buttonIndex] == @"Email to a friend") {
        NSLog(@"Email");
        [self displayComposerSheet];
    }

    else if ([actionSheet buttonTitleAtIndex:buttonIndex] == @"Add to Favorites")                   {
        NSLog(@"favorites");
        [self addFavorite];
    }
    else if ([actionSheet buttonTitleAtIndex:buttonIndex] == @"Post to Facebook") {
        NSLog(@"Facebook");
        [self shareOnFacebook];
    }
    else if ([actionSheet buttonTitleAtIndex:buttonIndex] == @"Tweet this") {
        NSLog(@"tweet");
        [self tweet];
    }
4

3 に答える 3

2

以下は私にとって正しいタイトルを印刷します:

NSLog(@"TITLE: %@", [actionSheet buttonTitleAtIndex: buttonIndex]);

比較のために、次のようにします。

[[actionSheet buttonTitleAtIndex: buttonIndex] isEqualToString: @"Email to a friend"]
于 2013-01-29T23:07:55.703 に答える
2

Objective-C オブジェクトをアドレスで比較することはできません。==思い通りにはいきません。iOS 5 で動作していたのは単なる癖であり、単純な再コンパイルで変わる可能性があります。

-isEqual:2 つのオブジェクトを比較するには、次を使用する必要があります。

if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqual:@"Email to a friend"]) {
    ...
}

より良いアプローチは、ボタン インデックスを既知のリストと比較することです (enumただし、たとえば。これにより、ローカライズが容易になり、後でボタンの名前を変更した場合のバグを防ぐことができます。

于 2013-01-29T23:07:14.650 に答える
0

isEqualToStringを使用していないことが原因である可能性があります。"=="は実際には文字列の比較を行っているのではなく、単にメモリ内の同じ場所を比較しているだけです。これがiOS6で失敗する理由である可能性があります。

于 2013-01-29T23:07:46.000 に答える