0

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

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

有没有人遇到过这种类型的错误?我需要更改新添加的文件以使其链接到正确的框架吗?我在这里有点抓住稻草,因为我看不出问题出在哪里,而且我在代码中的其他地方访问完全相同的属性也没有问题。

4

1 回答 1

0

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

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

于 2013-10-17T00:37:49.793 回答