【问题标题】:Xcode 4.5 still seems to be expecting @synthesize - else cannot access propertyXcode 4.5 似乎仍然期待@synthesize - 否则无法访问属性
【发布时间】:2012-11-04 08:55:28
【问题描述】:

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

我的问题:

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

简单示例:

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

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

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

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

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

结果:

这给了我一个编译时错误(“Unknown receiver myLabel”)。

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

谢谢

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

【问题讨论】:

    标签: xcode xib xcode4.5 synthesize


    【解决方案1】:

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

    【讨论】:

    • 谢谢,所以使用 _myLabel 很好,并且是一种公认​​的工作方式? (不建议使用合成的 getter/setter?)我最初问题的原因是我正在观看使用 4.3 的视频教程(lynda.com),并且在构建上述方法时自动创建了合成。该视频随后提到,在 XCode 4.5 中,用户甚至不需要编写合成,因为它是在后台为您完成的 - 但事实似乎并非如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多