XCode 4.4自动@Synthesize在XCode 4.3项目上失败

XCode 4.4 Auto @Synthesize failing on an XCode 4.3 Project

就这么简单。

奔跑的狮子

  • 我刚升级到xcode 4.4
  • 已加载我最近的xcode 4.3项目文件
  • 注释掉了一个@合成代码行
  • 错误比比皆是。:(
  • 已验证的编译器设置为"llvm 4.0"。

    然后我做了同样的测试,但是在xcode 4.4中创建了一个新项目,瞧!auto@synthesis在4.4项目中工作。

    auto@synthesis似乎也适用于添加到代码中的新属性。但现有的旧版本会产生一个错误。

    还有人经历过吗?还有什么需要检查的吗?

    我真的想让自动生成功能发挥作用。

    谢谢。


    错误不是您声明属性的方式,而是您使用它的方式。

    默认情况下,自动合成的属性使用前导下划线创建后备存储。

    因此,在代码中,当您的属性声明为:

    1
    @property (nonatomic, strong) UILabel *sectorLabel;

    你可以自动进行sythesize——类似这样的东西是由编译器自动生成的:

    1
    @synthesize sectorLabel = _sectorLabel;

    现在您可以通过属性访问它:

    1
    self.sectorLabel;

    或者,您可以通过以下方式直接访问后备存储器:

    1
    _sectorLabel;

    解决了!

    这就是我所做的。

    VIEW控制器

    1
    2
    3
    4
    5
    6
    @interface ViewController : UIViewController
    // Public:

    @property (nonatomic, strong) UILabel *sectorLabel;

    @end

    视图控制器.m

    1
    2
    3
    @implementation ViewController

    //@synthesize sectorLabel;

    然后这个错误就出现了。

    ViewController.m:48:2: Use of undeclared identifier 'sectorLabel'; did
    you mean '_sectorLabel'?

    当我将代码更改为:

    1
    self.sectorLabel

    Xcode4.3编译并运行良好,无需使用"self."关键字。但Xcode4.4似乎对此更加严格。


    接受的答案的问题是,您刚刚通过添加self.property更改了代码的行为。

    访问ivar与属性是两个不同的方面。正确的答案是通过添加下划线来更改代码以正确使用ivar。

    这与严格无关,它与更改Xcode的默认属性合成有关。而且,在大多数风格指南中,你都会看到苹果不鼓励自己的名字,所以我想这是不可能的。

    在我的代码中,我只使用self。当我打算通过属性getter和setter访问时。不为这种行为更改现有代码是浪费时间的。