使用在iOS6.1设备上运行的Xcode 5在CIFaceFeature中使用“dyld:Symbol not found”

时间:2013-10-17 00:27:31

标签: ios xcode ios7 xcode5 core-image

我有一个使用CoreImage中提供的面部检测的项目,该面部检测最初是在Xcode 4.6.3中使用部署目标为5.1的iOS6 SDK开发的。随着iOS7的发布,我更新了Xcode5和iOS7 SDK,使部署目标保持为5.1。

这很好,直到我在Xcode5中添加了一个引用CIFaceFeature对象中的属性的新类,特别是hasLeftEyePosition。该代码在运行iOS7.02的iPhone5S和运行iOS7.02的iPod第五代上构建并运行良好,但是当我尝试在运行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上运行正常。

有没有人遇到过这类错误?我是否需要更改新添加的文件以使其与正确的框架链接?因为我没有看到问题是什么以及我在代码中的其他位置访问完全相同的属性而没有任何问题,所以我有点抓住了稻草。

1 个答案:

答案 0 :(得分:0)

您确定要引用属性而不是实例变量吗?您看到的错误是由于iOS 6版Core Image中缺少实例变量。我可以在iOS 7标题中看到有一个声明的ivar,这在iOS 6中是不存在的。

如果您正在执行feature->hasLeftEyePosition或类似操作,那么您正在访问实例变量,该变量通常应被视为您不应直接使用的实现细节。如果你正在创建一个子类并且只是说hasLeftEyePosition,那么同上。您需要使用[feature hasLeftEyePosition]feature.hasLeftEyePosition来使用该属性。