if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
{[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];} //post-iOS6.0
else {[self dismissModalViewControllerAnimated:YES];} //pre-iOS6.0
非推奨のメソッドを処理するために、セレクター(上記)コードへの応答を行っています。そうすれば、私のアプリは古いバージョンのiOSと互換性がありますが、コードに「 'dismissModalViewControllerAnimated:'は非推奨です:iOS6.0で最初に非推奨になりました」という警告が表示されます。さらに重要なことに、私はどこかでAppleがあなたのコードの警告について文句を言うだろうと読んだ。
1)Appleコードの警告について文句を言うでしょうか?
2)非推奨のメソッドを正しく処理していますか?
3)非推奨のメソッドメソッドの警告をオフにする方法はありますか?
Appleは、コードで受け取るコンパイル時の警告を認識していません。
はい、あなたはこの慣習を正しく扱っています。明らかに、この場合、5.0より前のiOSをサポートしている場合にのみ、この作業を行う必要があります。ただし、一般に、メソッドを呼び出すことができるかどうかをテストしてから、適切なレンディションを呼び出す手法は完全に正しいものです。
警告をオフにしたい場合は、警告を一時的に抑制し、その後、適切な#pragma
構文を使用して再度オンにします。
if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
{
//post-iOS6.0
[self dismissViewControllerAnimated:YES completion:nil];
}
else
{
// pre-iOS6.0
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[self dismissModalViewControllerAnimated:YES];
#pragma clang diagnostic pop
}
ちなみに、特定の警告の-W
コードが何であるかを知りたい場合は、ログナビゲーターに移動し、警告を含む最近のビルドを選択して、ログを展開すると、そこに表示されます。 :
また、上で説明したように警告を抑制することはできますが、実際には、そうする必要はめったにないことにも注意してください。あなたの例を使用すると、プロジェクトのiOSデプロイメントターゲットが4.3の場合、警告は表示されません。また、デプロイターゲットが6.0以上の場合は警告が表示されますが、iOS 5.0ではいつでもdismissModalViewControllerAnimated
を使用できるため、dismissViewControllerAnimated
を呼び出すためにこの条件付きコードはおそらく必要ありません。
コードでこの警告を抑制する必要があるのは、将来プロジェクトに含まれるソースコードがあり、デプロイメントターゲットが何であるかがわからない場合のみです。あなたの例を使用して、上記のコードが4.3デプロイメントターゲットまたは5.0+デプロイメントターゲットのプロジェクトに含まれるかどうかわからない場合。その場合、この構文は非常に便利です。しかし、繰り返しになりますが、__IPHONE_OS_VERSION_MIN_REQUIRED
で条件付きチェックを使用することもできます。例:
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
{
//post-iOS5.0
[self dismissViewControllerAnimated:YES completion:nil];
}
else
{
// pre-iOS5.0
[self dismissModalViewControllerAnimated:YES];
}
#else
[self dismissViewControllerAnimated:YES completion:nil];
#endif
下位互換性に本当に興味がある場合は、Ray Wenderlichによるすばらしいチュートリアルがあります ここ
はい多くの警告が存在し、その置換を修正するためにビューをモーダルに却下します。
iOS 6では、これらは次のとおりです。-
[self dismissViewControllerAnimated:NO completion:nil];
[self presentViewController:vc animated:NO completion:nil];