1

所以我试图在我想在我的 2006 Macbook 上构建的项目中使用AFNetworking库来提供 REST 服务。Macbook 是第一代 2006 年 32 位酷睿双核 w/雪豹。

我对 Objective-C 开发还很陌生,我正在按照教程在这里开始使用 AFNetworking:https ://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking

使用 xcode 4.2 我的问题是,当我创建一个新项目并尝试构建时,我立即得到:语义问题 - 合成属性 'window' 必须与兼容的 ivar 命名相同,或者必须明确命名 ivar

我检查了我的新项目的构建设置,由于某种原因,当我的机器是 32 位时,xcode 默认假定 64 位英特尔架构?!奇怪的。我将它换成 32 位,这就是错误出现的地方。

所以我现在可以通过在 AppDelegate 中显式创建我自己的窗口实例变量来纠正这个语义问题:

NSWindow * _window;

我在构建 32 位 objc 时读到了这一点: 在我看到的许多公共 github 项目代码中,合成没有实例变量的属性似乎很常见(缺少 ivar 声明)。现在是每个人都在强迫我们使用 64 位,还是只是懒得创建实例变量?:(

所以我的问题是,它看起来像 AFNetworking 库是为 64 位 Intel 构建的,因为当我将 AFNetworking 添加到我的项目中时,我到处都会遇到相同的语义问题 ivar 错误。查看库代码,没有为任何属性在整个代码中声明的显式实例变量。

我在这里完全搞砸了吗?我可以通过为所有属性手动创建实例变量来解决这种情况,但这对于长期项目维护来说会很痛苦。

我想我希望这里有某种编译器标志,我可以添加它可以一次性解决这一切?但我猜我运气不好,现在是时候扔掉这台 Macbook 并买一台新的现代笔记本了。

4

1 回答 1

2

自动合成的实例变量需要“现代”的 Objective-C 运行时,它只在 64 位机器上可用。所以,不幸的是你是正确的,你不能只设置一个编译器标志来解决这个问题。解决方案确实是为您尝试使用的类中的属性添加实例变量声明。

我不确定这是否值得扔掉你的计算机......也就是说,现代运行时提供的便利对开发人员来说非常诱人,而且你不太可能看到很多新代码向前发展保持对 32 位 Mac 的支持。苹果在短时间内只卖了 32 位的英特尔 Mac,而 Lion 需要 64 位的 Mac,所以使用 32 位 Mac 的人的比例已经很小,而且还在迅速变小。

于 2012-04-10T15:14:52.983 回答