2

我在全新安装的 Mountain Lion 上使用 Xcode 4.5。编译器是 LLVM4.1,我的项目使用的是 ARC。(我过去曾涉足 Xcode,但有一段时间没有接触过它)。

我的问题:

我知道在较新版本的 Xcode 中不再需要包含 @synthesize 指令(果然,当我从 .xib 中的 UI 组件 ctrl-drag 到 .h 文件时,不会在其中创建指令.m 文件),但没有它们我无法访问这些属性,而是得到“未知接收器 xxx”错误。

简单的例子:

我创建了一个带有标签 ('myLabel') 和按钮 ('myButton') 的 Single View iPhone 项目。我 ctrl 从 ViewController.xib 中的 UILabel 拖到 ViewController.h 以创建以下属性:

@property (strong, nonatomic) IBOutlet UILabel *myLabel;

我也通过拖放创建了按钮操作。

在 .m 文件中,我在 myButton 方法中编写了以下代码:

- (IBAction)myButton:(id)sender {
  NSLog(@"The label text is %@", [myLabel text]);
}

结果:

这给了我一个编译时错误(“未知接收者 myLabel”)。

我仍然可以使用下划线(即 [_myLabel 文本])或添加“@synthesize myLabel;”来访问我的属性。手动在 .m 文件的顶部,但我认为我不需要这样做,或者应该为我完成。谁能解释我在代码中做错了什么(或者如果这是由于我需要调整的某些设置?)

谢谢

ps 我注意到我的 .m 文件现在在顶部也有自己的 @interface 块(大概是为了声明私有变量?)

4

1 回答 1

4

自动 ivars 带有下划线前缀,以将它们与属性名称区分开来。所以你需要使用_myLabel. 如果您不喜欢默认前缀,可以使用更改属性的 ivar 名称@synthesize

于 2012-11-04T09:01:15.887 回答