32

私のプロジェクトでは、Assigning to 'AppDelegate *' from incompatible type 'id' と表示されています。

これは正確には何ですか?なぜこの警告が発生したのですか?

私は.mで宣言しました

AppDelegate *appdev;

そしてviewDidLoadで

{
    appdev = [[UIApplication sharedApplication]delegate];     <= warning here
}

この警告を非表示にしたい。私は何をすべきか?前もって感謝します。

4

4 に答える 4

87

等しいことがわかっているので、キャストを追加してコンパイラに知らせます

 AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication]delegate];

これはSwiftでも出てくるかもしれないので

 let app = UIApplication.shared.delegate as! AppDelegate
于 2013-07-10T05:40:49.213 に答える
7

必要に応じて、どこにでもAppDelegateをインポート するためにこれを持っています。シンプルです。

APPDELEGATE で

/**
 *  Get AppDelegate
 *  Call [AppDelegate getAppDelegate]
 *
 *  @return AppDelegate
 */
+ (AppDelegate *) app {
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}

クラスのどこでも

#import "AppDelegate.h" // TOP OF YOUR CLASS

AppDelegate *app = [AppDelegate app];
于 2015-02-11T23:14:38.047 に答える
3

警告メッセージを防ぐために型キャストすることができます。

試す:

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate];
于 2013-07-10T05:37:44.860 に答える
1

Protocol を返すため、cast と入力する必要があります。

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate];
于 2013-07-10T05:38:48.330 に答える