2013-03-06 23 views
5

私のアプリでは、View Controllerを提示する必要があります。 View Controllerを表示するための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 –

答えて

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)#>] 

は、私が誤って6.0にデプロイメント・ターゲットを設定していたトリック

+0

これはランタイムバインドであり、通常の呼び出しよりも時間がかかります。 – Apurv

+2

@Apurv no、 '-performSelector:'は通常、通常のメソッド呼び出しと同じくらい速く、すべてが 'objc_msgSend'にコンパイルされます。 –

+1

objc_msgSendは、コンパイラによって生成されます。コンパイラによって型チェックされない唯一の違いはここにあります。これは、saikaが欲しいものです。バインディングは常に動的に行われます。 –

0

を行います使用することができところで

。それで、警告メッセージが表示されました。展開ターゲットを4.3に変更した後、警告メッセージは表示されません(サポートが必要です)。答えをありがとう!

関連する問題