我一直在“调试 X86-64”模式(Xcode 3.6)下构建我的程序,一切都完美运行。 但是,我只是尝试切换到“Release X86-64”模式,编译后我的每个属性都收到以下错误:
Synthesized property 'x' must either be named the same as a compatible ivar or must
explicitly name an ivar.
其中“x”是我的属性之一,第一个是“company”(我收到了 51 个此类错误。)。在我的 .h 接口文件中,我以这种方式列出了这些项目:
@property (copy) NSString *company,
*address1,
*address2,
*city,
*usState,
*zip,
*phone,
*fax,
*email,
*web; // etc, etc.
在我的 .M 实现文件中,我将它们综合如下:
@synthesize company,
address1,
address2,
city,
usState,
zip,
phone,
fax,
email,
web; // etc, etc.
我的理解是,实例变量是自动为这些属性创建的......事实上,它们似乎工作得很好,直到我尝试在“发布”模式下编译。
我在书中找不到任何我必须解释的内容。 我是否做错了什么,或者更具体地说,我应该包含什么来修复“发布”编译的问题?
谢谢!
还有另一个快速解决方案:也在委托定义中添加这些属性
@interface YourAppDelegate : NSObject <NSApplicationDelegate> {
NSTextField * company;
NSSlider * company;
...
}
@property (copy) NSString *company,
*address1,
... ;
我相信我已经在这里回答了我自己的问题。 我做了两件事来纠正这些错误:
首先,我在接口文件中添加了实例变量声明。 其次,我将 @Synthesize 指令更改为:
@synthesize company = company;
@synthesize address1 = address1;
etc...
这已经修复了所有错误,并且所有内容都可以在构建和发布模式下正确编译。
如果您只想发布,但不想受“旧”运行时限制的困扰,请在构建设置中禁用 32 位架构。 (实际上“新”运行时最终得到的是自 1991 年起在 IBM SOM 中实现的,因此对于 Objective-C 运行时来说“旧”和“新”是非常相关的,但那是另一个故事了。)