2

UIAlertView を表示したいヘルパー クラスがあり、Web サービス アクションを実行します。他の場所でアラートビューを再利用できるように、このようにしたいと思います。

私はそれを次のように宣言しています:

@interface FBLinkHelper : NSObject <UIAlertViewDelegate>

アラート ビューを表示するメソッドもあります。

- (void) showLinkDialog {
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Link account with Facebook?" message:@"Linking your account with Facebook extends your user experience. Link account?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
    [av show];
}

これは私がダイアログを表示している方法です:

    FBLinkHelper *fbLinkHelper = [[FBLinkHelper alloc] init];
    [fbLinkHelper showLinkDialog];

私にはすべてがかなり正常に思えます。アラート ビュー ダイアログが表示されますが、ボタン (いずれか 1 つ) をクリックすると、コンソールに何も表示されずにアプリがクラッシュします。didDismissWithButtonIndex などの UIAlertViewDelegate メソッドを配置した場合にのみクラッシュすることに気付きました。なぜこうなった?

4

2 に答える 2

2

-アップデート-

インスタンスはそのFBLinker呼び出し元の強力なプロパティではなかったため、デリゲート コールバックはダングリング ポインターに行きました。OPレポートの作成FBLinker strongが問題を処理しました。

UIViewクラスを拡張する代わりにfrom にするという最初の提案はNSObject効果がなく、ここでは歴史的な目的でのみ参照されています。

于 2012-06-18T16:38:15.090 に答える
0

作業中のアプリでも同じケースがありました。デリゲートオブジェクトが強力でない(または5.0より前のiOSで保持されている)プロパティである場合、UIAlertViewが表示された直後に割り当てが解除される可能性があります。

于 2012-06-25T16:43:36.867 に答える