【问题标题】:Error building 32-bit OS X app?构建 32 位 OS X 应用程序时出错?
【发布时间】:2011-10-29 22:17:37
【问题描述】:

我正在开发我的第一个 Mac OS X 应用程序。我的项目是使用 XCode 默认设置的,我没有触及任何构建设置。为 Mac 64 位构建时,应用程序运行良好。但是,在为 Mac 32 位构建时,我得到一个看似任意的错误,上面写着:

Semantic issue: Synthesized property 'myProperty' must either be named the same as a compatible ivar or must explicitly name an ivar.

我可以检查哪些内容?

【问题讨论】:

  • 让我们看看包含属性和实例变量声明的头文件 - 错误消息非常准确
  • 我现在觉得很傻。我已经多次查看这些文件,即使是在不同的日子。现在你要求再次查看它们,我发现了一个错字!哇,谢谢。

标签: cocoa compiler-errors 32bit-64bit xcode


【解决方案1】:

听起来你已经发现了错误,但我想我可以回答你的问题,以防其他人以后发现它。

Apple 在 64 位 Objective-C 运行时中做了很多他们以前无法做到的更改,因为它会破坏二进制兼容性。不同之处之一是在 32 位运行时综合属性必须由实例变量支持。在 64 位运行时综合属性仍然需要,但它们是自动为您创建的。默认情况下,实例变量的名称应与属性的名称相同。

因此,如果您需要支持 32 位,请确保为所有属性创建实例变量。如果您只支持 64 位,那么您仍然可以这样做,以便您的代码可以同时为 32 位和 64 位构建,但您不必这样做。

【讨论】:

  • 在现代运行时中,合成的属性仍然必须由实例变量支持;不同之处在于编译器将为您创建它们,而在为旧的 32 位版本编译时,必须显式声明 ivars。
  • 谢谢你的回答,这救了我:)
【解决方案2】:

您可以在 Xcode 中为 32 位构建目标设置 NS_BUILD_32_LIKE_64 预处理器宏。这样可以省去为 32 位和 64 位版本维护单独代码的麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2012-01-15
    • 1970-01-01
    • 2016-06-28
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多