UIAlertView/UIAlertController iOS 7 と iOS 8 の互換性 質問する

UIAlertView/UIAlertController iOS 7 と iOS 8 の互換性 質問する

Swift を使用してアプリを作成しており、アラートを表示する必要があります。アプリは iOS 7 および iOS 8 と互換性がある必要があります。UIAlertViewは に置き換えられたのでUIAlertController、システム バージョンを確認せずに が使用可能かどうかを確認するにはどうすればよいですかUIAlertController? Apple は、API の可用性を判断するためにデバイスのシステム バージョンを確認しないよう推奨していると聞いています。

これは私が iOS 8 で使用しているものですが、iOS 7 では「 」でクラッシュしますdyld: Symbol not found: _OBJC_CLASS_$_UIAlertAction

let alert = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
let cancelAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)

iOS 8 の UIAlertView を使用すると、次の警告が表示されます。Warning: Attempt to dismiss from view controller <_UIAlertShimPresentingViewController: 0x7bf72d60> while a presentation or dismiss is in progress!

ベストアンサー1

検出パターンは Objective-C スタイルと同じです。

現在アクティブなランタイムがこのクラスをインスタンス化できるかどうかを検出する必要があります

if objc_getClass("UIAlertController") != nil {

     println("UIAlertController can be instantiated")

      //make and use a UIAlertController

 }
 else {

      println("UIAlertController can NOT be instantiated")

      //make and use a UIAlertView
}

OSのバージョンに基づいてこれを解決しようとしないでください。能力を検出する必要がありますないOS。

編集

この回答の元の検出器は最適化NSClassFromString("UIAlertController")で失敗する-Oため、リリースビルドで機能する現在のバージョンに変更されました。

編集2

NSClassFromStringXcode 6.3/Swift 1.2のすべての最適化で動作しています

おすすめ記事