2017-09-27 2 views
1

私のアプリにAppleのARKitサンプルアプリケーションを統合しようとしていました。 ARKitは追加機能なので、iOSの下位バージョンをサポートする必要があります。すべてのARKitサンプルアプリケーションクラスに@available(iOS 11.0、*)タグを追加しました。これは、この1つのエラーを除いてほとんど機能します: "オーバーライド 'prepare'はオーバーライド宣言と同じくらい利用可能でなければなりません。どのように私はこの問題を解決できますか? enter image description hereswift 4.0: 'prepare'をオーバーライドする宣言と同じようにオーバーライドする必要があります。

+0

あなたのための解決策が見つかりましたか? –

答えて

0

prepareというメソッドをオーバーライドしていますが、継承元のスーパークラスよりも利用可能な量が少なくなるように設定しています。スーパークラスでpublicの場合は、オーバーライドするときにpublicまたはopenにする必要があります。同様に、iOS 11よりも低いiOSバージョンで使用できる場合は、同じiOSバージョンでオーバーライドされた実装を使用できるようにする必要があります。あなたが適切なアクセスキーワードを使用してオーバーライドされたメソッドをマークしたことを確認し、それはまだ上記@available属性を追加しました私のために働いた何が

+0

しかし、スーパークラスはUIViewControllerです。私はAppleのUIKitに変更を加えることができません – guocongyu

+0

そしてなぜviewDidLoad()などのオーバーライドが機能するのですか?このメソッドだけが動作しません。 – guocongyu

+0

これはUIKitでは問題ありません。 'SegueIdentifier'または' VirtualObjectSelectionViewController'は '@available(iOS 11、*)'とマークされていますか?もしそうなら、あなたの使用を 'if#available'ブロックにラップしてみてください –

0

から継承しているスーパーなど、すべてのiOSバージョンで@availableだということメソッドのように:

@available(iOS 11.3, *) 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     //... 
    } 
関連する問題