27

Xcode 4.2.1およびiOS5 SDKを実行している新しいプロジェクトを開始しました。プロジェクトにはARCが設定されています。十分Cocoa-Touch - 代議員の混乱

warning: Semantic Issue: Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id<UITabBarControllerDelegate>' 

さてさて、公正、私がやっによってUITabBarControllerDelegateに適合するために私AppDelegateを設定します。私は私が言って警告メッセージが表示されますことを行う場合[tabBarController setDelegate:self];を行うことにより、UITabBarControllerの委譲するAppDelegateを設定しようとしています

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 

偉大な警告が消えます。

もう一度エラーが発生します。ビューコントローラでは、私はので、私はこれを行うAppDelegateのホールドを取得したい:AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];をが、これは言って警告をレンダリングします:

warning: Semantic Issue: Initializing 'AppDelegate *__strong' with an expression of incompatible type 'id<UIApplicationDelegate>' 

をしかし、私は私のAppDelegateが私の第二の警告が消えUITabControllerDelegateプロトコルに準拠していることを削除する場合。

非常に奇妙な挙動は、ココアの専門家に何を与えるのですか?

答えて

81

AppDelegate変数を割り当てる前に型キャストを行ってください。

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

さらに、UITabControllerDelegateを保持してください。

+1

もちろん!ありがとう... –

+2

こんにちは@Aadhira、これは私のエラーを解決しましたが、なぜソリューションが動作するのか分かりません。あなたは誰か私に説明してもらえますか?ありがとうございました! – narner

+0

http://stackoverflow.com/questions/14977284/in-objective-c-why-is-casting-needed-when-assigning-to-a-variable-whose-type-is 上記のリンクを参照してください - @narner – Arundev