XCode 4.4 Auto @Synthesize failing on an XCode 4.3 Project
就这么简单。
奔跑的狮子
已验证的编译器设置为"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访问时。不为这种行为更改现有代码是浪费时间的。