27

我剛開始運行Xcode 4.2.1和iOS5 SDK的新項目。該項目使用ARC進行設置。我試圖設置AppDelegate中成爲的UITabBarController委託做[tabBarController setDelegate:self];如果我這樣做,我得到一個警告消息說:Cocoa-Touch - 委託混淆

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

好吧不夠公平,我把我的AppDelegate通過這樣做,以符合UITabBarControllerDelegate

@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

當然!謝謝... – 2012-01-11 13:54:45

+2

嗨@Aadhira,這解決了我的錯誤,但我不確定我明白爲什麼解決方案有效。你會不會介意向我解釋?謝謝! – narner 2015-01-20 16:35:53

+0

http://stackoverflow.com/questions/14977284/in-objective-c-why-is-casting-needed-when-assigning-to-a-variable-whose-type-is 請參考上面的鏈接 - @narner – Arundev 2016-07-06 17:08:23