4

我一直在“调试 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”是我的属性之一,第一个是“公司”(我收到了 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.

我的理解是,实例变量是为这些属性自动创建的……事实上,它们似乎工作得很好,直到我尝试在“发布”模式下编译。

我在书中找不到任何我必须解释的东西。我做错了什么,或者更具体地说,我应该为“发布”编译修复这个问题吗?

谢谢!

4

3 回答 3

2

还有另一个快速的解决方案:也在委托定义中添加这些属性

    @interface YourAppDelegate : NSObject <NSApplicationDelegate> {
      NSTextField * company;
      NSSlider * company;
         ...
     }

    @property (copy) NSString   *company,
                                *address1,
                                ... ;
于 2014-06-21T00:48:24.570 回答
1

我相信我已经在这里回答了我自己的问题。我做了两件事来纠正这些错误:

首先,我在接口文件中添加了实例变量声明。其次,我将@Synthesize 指令更改为:

@synthesize company = company;
@synthesize address1 = address1;
etc...

这已经修复了所有错误,并且在构建和发布模式下都可以正确编译。

于 2012-05-07T13:41:02.127 回答
0

如果您只想发布,但不想为“旧”运行时限制而烦恼,请在构建设置中禁用 32 位架构。(实际上,“新”运行时最终得到的,是自 1991 年以来在 IBM SOM 中实现的,所以“旧”和“新”在 Objective-C 运行时是非常相关的,但那是另一回事了。)

于 2018-07-02T19:01:42.493 回答