2015-11-13 69 views
1

奇怪的問題,我正在使用標準檢查來查看設備是否具有3D Touch。它包裹着iOS9檢查,該檢查正在通過,但未在我的iPhone 6S上傳遞.Availableif statement,該iPhone 6S正在運行iOS9.1,並且已在設置中啓用3D Touch。3D觸摸功能檢查問題 - Swift

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 
    ~~~~^~~~~~~~~~~~~~~~~~~~ 

if statement外的registerForPreviewingWithDelegate(self, sourceView: view)作品,但沒有實現一個很好的選擇!

進一步調查

我測試的代碼在我MainViewController它完美地工作。這是一個奇怪的情況,我目前找到了一個解決方法。

+0

「但不會進入我的聲明」是什麼意思? – matt

+0

更新問題,這是一個深夜的編碼! – RichAppz

+0

我仍然不知道你的意思。我測試了你的代碼,它通過可用性檢查,'traitCollection.forceTouchCapability'測試,並且測試失敗(因爲我沒有強制接觸)。 – matt

回答

1

我有同樣的問題:我在做這個檢查viewDidLoad,這是之前對象有traitCollection信息。推遲檢查和邏輯,直到viewDidLayoutSubviews爲我工作。

+0

謝謝JimmyB,當我有機會我會檢查 – RichAppz