2

奇妙な問題です。標準のチェックを使用して、デバイスに 3D Touch があるかどうかを確認しています。.Available if statementiOS9.1を実行していて、設定で 3D Touch が有効になっている私の iPhone 6S ではパスしていますが、パスしていません。

if #available(iOS 9.0, *) {
     if traitCollection.forceTouchCapability == .Available {
          registerForPreviewingWithDelegate(self, sourceView: view)
          constantChange = cstInfoBar.constant + 20
     }
}

ブレークポイントを設定しましたが、次のメッセージが表示されます。

(lldb) po traitCollection.forceTouchCapability
error: <EXPR>:1:17: error: 'forceTouchCapability' is only available on iOS 9.0 or newer
traitCollection.forceTouchCapability
                ^
<EXPR>:1:17: note: add 'if #available' version check
traitCollection.forceTouchCapability
                ^
<EXPR>:1:17: note: add @available attribute to enclosing instance method
traitCollection.forceTouchCapability
                ^
<EXPR>:1:17: note: add @available attribute to enclosing extension
traitCollection.forceTouchCapability
                ^
<EXPR>:9:9: warning: initialization of variable '$__lldb_error_result' was never used; consider replacing with assignment to '_' or removing it
    var $__lldb_error_result = __lldb_tmp_error
    ~~~~^~~~~~~~~~~~~~~~~~~~

registerForPreviewingWithDelegate(self, sourceView: view)外部で機能しif statementますが、実装するのに適したオプションではありません!

さらなる調査

MainViewController でコードをテストしたところ、完全に機能しました。これは奇妙な状況です。私は今のところ回避策を見つけました。

4

1 に答える 1

2

私は同じ問題を抱えていました:viewDidLoadオブジェクトがtraitCollection情報を持つ前に、このチェックインを行っていました。私のために働くまでチェックとロジックを延期viewDidLayoutSubviewsします。

于 2016-01-18T20:06:23.217 に答える