2013-10-17 17 views
0

我有一個使用CoreImage中提供的面部檢測的項目,它最初是在Xcode 4.6.3中使用iOS6 SDK進行部署5.1的目標。隨着iOS7的發佈,我更新爲Xcode5和iOS7 SDK,將部署目標保持爲5.1。使用在iOS6.1設備上運行的Xcode 5的「CIFaceFeature」中的「dyld:Symbol not found」找不到符號

這很好,直到我在Xcode5中添加了一個新類,它引用CIFaceFeature對象中的屬性,特別是hasLeftEyePosition。該代碼在運行iOS7.02的iPhone5S和運行iOS7.02的iPod 5th上運行得很好,但是當我嘗試在運行iOS6.1的iPhone4上調試時運行它時,我在設備上獲得啓動畫面,然後控制檯中的以下輸出:

dyld: Symbol not found: _OBJC_IVAR_$_CIFaceFeature.hasLeftEyePosition 
    Referenced from: /var/mobile/Applications/... 
    Expected in: /System/Library/Frameworks/CoreImage.framework/CoreImage 
in /var/mobile/Applications/... 

我已驗證CoreImage.framework是否包含在鏈接中。關於這個錯誤的奇怪之處在於,我在Xcode 4.6.3中添加的文件中訪問代碼庫中CIFaceFeature對象的屬性。

我也證實,如果我註釋掉新加入的代碼hasLeftEyePosition,那麼應用程序在iOS6.1 iPhone4上運行得很好。

有沒有人有這種類型的錯誤的經驗?是否有需要更改的新增文件的設置,以便與正確的框架鏈接?由於我沒有看到問題所在,以及我在代碼中的其他地方訪問完全相同的屬性而沒有任何問題,所以我在這裏抓住了一些吸管。

回答

0

您確定您正在參考屬性而不是實例變量?你看到的錯誤是由於iOS 6版本Core Image中缺少實例變量。我可以在iOS 7頭文件中看到,這是iOS 6中缺少的已聲明的ivar。

如果您在執行feature->hasLeftEyePosition或類似的操作,您將訪問實例變量,該變量通常應被視爲實現你不應該直接使用細節。如果你正在創建一個子類,並且只說hasLeftEyePosition,那麼。您需要使用[feature hasLeftEyePosition]feature.hasLeftEyePosition以使用該屬性。

+0

我不是繼承CIFaceFeature,我通過'feature.hasLeftEyePosition'使用屬性 –

+0

@AlexLindblad然後,哇。這使得看起來clang正在優化對實例變量訪問的屬性訪問,這對我來說似乎不可能和/或非常困難。你可以嘗試關閉優化嗎​​? (又名「優化級別」設置爲無) –

+0

@AlexLindblad另外,可以肯定的是,您能向我們展示您正在註釋的代碼以解決問題嗎? –

相關問題