2013-03-06 56 views
5

在我的應用程序中,我需要提供一個視圖控制器。呈現視圖控制器的6.0方法是presentViewController:animated:completion :.我也想支持4.3。在4.3中,要調用的方法是presentModalViewController:animated :.所以我使用respondsToSelector:來確定該方法是否受支持。但是,當我編譯應用程序6.0它給警告消息iOS版本檢查給出警告

presentModalViewController:動畫:被棄用:在IOS 6.0

第一不贊成任何人都可以知道如何擺脫這一警告的。我也沒有4.3設備來測試它是否工作。我需要假設我寫的代碼應該在4.3上工作。

if([myViewController respondsToSelector:@selector(presentModalViewController:animated:)]){ 
     [myViewController presentModalViewController:anotherViewController animated:YES]; 
    }else{ 
     [myViewController presentViewController:anotherViewController animated:YES completion:nil]; 
    } 
+1

忽略該警告或抑制它:http://stackoverflow.com/a/4133201/427309 – 2013-03-06 16:07:46

回答

3

你可以做檢查相對來說respondsToSelector它可能會幫助,這是實際去,如果你是支持舊版本:)

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ 
    [self presentViewController:anotherViewController animated:YES completion:nil]; 
} else { 
    [self presentModalViewController:anotherViewController animated:YES]; 
} 
1

您可以啓用/禁用警告與編譯進路你的代碼,但他們不是很友好的使用。我不記得這種警告的具體編譯。但是這裏有些人會告訴你。

順便說一句,你可以用一個簡單的

[id performSelector:<#(SEL)#> withObject:<#(id)#>] 

會做的伎倆

+0

它是一個運行時綁定,比普通調用需要更多的時間。 – Apurv 2013-03-06 16:07:19

+2

@Apurv no,'-performSelector:'通常和正常方法調用一樣快 - 它全部編譯爲'objc_msgSend'。 – 2013-03-06 16:09:56

+1

objc_msgSend由編譯器生成,用於執行:作爲直接消息。唯一不同的是它不是由編譯器檢查的類型。這是saika想要的。綁定總是動態完成的。 – 2013-03-06 16:17:12

0

我已經部署目標錯誤地設置爲6.0。所以它顯示了提到的警告信息。將部署目標更改爲4.3(我需要支持)後沒有警告消息。感謝您的答案!