Xcode 4.5似乎仍然需要@synthesis-else无法访问属性

Xcode 4.5似乎仍然需要@synthesis-else无法访问属性,xcode,xib,xcode4.5,synthesize,Xcode,Xib,Xcode4.5,Synthesize,我在全新安装的山狮上使用Xcode 4.5。编译器是LLVM4.1,我的项目使用ARC。我过去曾涉猎过Xcode,但有一段时间没有接触过它 我的问题: 我知道,在较新版本的Xcode中,不再需要包含@synthesis指令,而且当我按ctrl键从.xib中的UI组件拖动到.h文件时,指令不会在.m文件中创建,但是如果没有它们,我就无法访问这些属性,而是会出现未知的接收方xxx错误 简单的例子: 我创建了一个带有标签“myLabel”和按钮“myButton”的单视图iPhone项目。我将ctrl

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

我的问题:

我知道,在较新版本的Xcode中,不再需要包含@synthesis指令,而且当我按ctrl键从.xib中的UI组件拖动到.h文件时,指令不会在.m文件中创建,但是如果没有它们,我就无法访问这些属性,而是会出现未知的接收方xxx错误

简单的例子:

我创建了一个带有标签“myLabel”和按钮“myButton”的单视图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

我仍然可以使用下划线,即[U myLabel text]或添加@synthesis myLabel;在.m文件的顶部手动,但我认为我不需要这样做,或者应该为我这样做。有人能解释我在代码中做错了什么,或者这是否是由于我需要调整的某些设置造成的吗

谢谢


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

自动IVAR以下划线作为前缀,以区别于属性名称。因此,您需要使用myLabel。如果不喜欢默认前缀,可以使用@synthesis更改属性的ivar名称。自动ivar的前缀为下划线,以区别于属性名称。因此,您需要使用myLabel。如果您不喜欢默认前缀,可以使用@synthesis

更改属性的ivar名称,谢谢,所以使用_myLabel是可以接受的工作方式?不建议使用合成的getter/setter?我最初提出这个问题的原因是,我正在观看一个视频教程lynda.com,它使用了4.3,而合成是在构建上述方法时自动创建的。视频接着提到,在XCode 4.5中,用户甚至不需要编写合成,因为它是在后台为您完成的-但事实似乎并非如此。谢谢,所以使用_myLabel很好,是一种公认的工作方式吗?不建议使用合成的getter/setter?我最初提出这个问题的原因是,我正在观看一个视频教程lynda.com,它使用了4.3,而合成是在构建上述方法时自动创建的。视频接着提到,在XCode 4.5中,用户甚至不需要编写合成,因为它是在后台为您完成的,但事实似乎并非如此。