2010-07-08 31 views
0

我的iPad通用的應用程序有一個方法,我從這裏實現:iPad的通用應用程序有方法有警告「的協議,沒有找到」,但它的工作原理

Best way to programmatically detect iPad/iPhone hardware

-(BOOL)isPad 
{ 
    BOOL isPad; 
    NSRange range = [[[UIDevice currentDevice] model] rangeOfString:@"iPad"]; 
    if(range.location==NSNotFound) isPad=NO; 
    else isPad=YES; 
    return isPad; 
} 

當我寫我的代碼一樣這樣的:

if([[[UIApplication sharedApplication] delegate] isPad]) // do something 

我得到警告:

'-isPad' 沒有找到公關otocol

然而,它宣佈在我的應用程序委託類:

-(BOOL)isPad; 

並在實施(上圖)。

任何想法爲什麼這樣?

在此先感謝。

回答

1

-delegate返回id<UIApplicationDelegate>。即使你的應用代理支持-isPad,UIApplicationDelegate沒有,這是警告是關於。

您需要將返回值轉換爲您的類以消除警告。

YourAppDelClass* appDel = [UIApplication sharedApplication].delegate; 
if ([appDel isPad]) { 
    ... 
+0

是的,這就是我通過創建ref變量來解決它的方法。感謝您的幫助 – 2010-07-08 13:16:46

+0

我可以將它轉換爲h文件中的define語句嗎? – 2010-07-08 13:17:29

+0

是 - #define kIsPad [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] isPad] – 2010-07-08 13:21:05

0

編譯器希望在uiapplicationdelegate協議中找到isPad聲明。嘗試使其成爲uiapplication的實例方法。

+0

我做了一個引用變量,並用它來調用該方法,並刪除了該警告。謝謝 – 2010-07-08 11:49:51

+0

把它作爲我在問題中所做的方式來調用它會更簡單,每次創建ref變量都是一件痛苦的事情。 – 2010-07-08 12:03:48

相關問題