4

就这么简单。

奔跑的狮子。

  1. 我刚刚升级到 XCode 4.4
  2. 加载了我最近的 XCode 4.3 项目文件
  3. 注释掉了@synthesize 行代码
  4. 并且错误比比皆是。:(

已验证的编译器设置为“LLVM 4.0”。

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

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

还有人经历过这个吗?还有什么我应该检查的吗?

我真的希望自动生成功能能够正常工作。

谢谢。

4

3 回答 3

5

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

默认情况下,自动合成的属性会创建一个带有前导下划线的后备存储。

所以在你的代码中,当你有一个属性声明为:

@property (nonatomic, strong) UILabel *sectorLabel;

然后你自动合成——编译器会自动为你生成这样的东西:

@synthesize sectorLabel = _sectorLabel;

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

self.sectorLabel;

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

_sectorLabel;
于 2012-07-29T21:26:37.473 回答
1

解决了!

所以这就是我所做的。

视图控制器.h

@interface ViewController : UIViewController
// Public:

@property (nonatomic, strong) UILabel *sectorLabel;

@end

视图控制器.m

@implementation ViewController

//@synthesize sectorLabel;

然后弹出这个错误。

ViewController.m:48:2:使用未声明的标识符“sectorLabel”;你是说'_sectorLabel'吗?

它解决了我将代码更改为的那一刻:

self.sectorLabel

XCode 4.3 编译并运行良好,无需拥有“自我”。关键词。但 XCode 4.4 似乎对此更加严格。

于 2012-07-29T21:06:29.680 回答
0

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

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

这与对 xcode 的默认属性合成的更改无关紧要。此外,在大多数风格指南中,您会读到 Apple 不鼓励使用 _ivar 名称,所以我猜那是在窗外。

在我的代码中,我只使用 self. 当我打算通过属性获取器和设置器访问时。不为此行为更改我现有的代码是浪费时间。

于 2012-08-02T05:35:58.770 回答