2011-08-18 80 views
8

我正在开发我的第一台Mac OS X应用程序。我的项目是使用XCode默认设置设置的,我没有触及任何生成设置。当为64位Mac构建时,该应用运行良好。然而,对于建设32位Mac的时候,我得到的是说,一个看似随意的错误:构建32位OS X应用程序时出错?

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

我可以检查什么样的东西?

+3

让我们看看包含属性和实例变量声明的头文件 - 错误消息是一个非常好的确切的一个 – Mark

+0

现在我觉得很愚蠢。即使在不同的日子,我也多次查看这些文件。现在你要求再看一遍,我发现了一个错字!哇谢谢。 – anna

回答

20

这听起来像你找到了错误,但我想我可以回答你的问题,以防别人后来发现它。

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

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

+7

合成属性仍需由现代运行时中的实例变量支持;不同之处在于编译器会为您创建它们,而在编译旧版32位版本时,必须明确声明ivars。 –

+0

谢谢!很高兴知道那种信息。 – anna

+0

谢谢你的回答,这救了我:) – banderson623

0

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

相关问题