自动 属性 合成不会合成 属性 - 新警告 iOS8.3

Auto property synthesize will not synthesize property - new warning iOS8.3

更新到 iOS8.3 后,我开始收到一堆 iOS8.2 上没有的新警告。其中一个特别吸引了我的眼球;

@property (strong, nonatomic) IBOutlet UITableView *tableView;

这是在“.m”文件中声明的。

iOS8.3 中发生了什么变化以使其成为警告?

Auto property synthesis will not synthesize property 'tableView'; it will be implemented by its superclass, use @dynamic to acknowledge intention

如果您使用的是 UITableViewController,那么 tableView 已经合成。 (即 self.tableView 是 UITableViewController 的 tableView)。

发生了什么变化?编译器变得更聪明了。

您可能正在子类化 UITableViewController。

UITableViewController 已经有一个 属性 命名的 tableView。它已经在 UITableViewController 中合成或以其他方式实现。所以警告告诉你你没有得到你自己的 tableView 属性,但是你得到的是 UITableViewController 提供的。

显然如果你不知道UITableViewController中的tableView,如果你错误地认为这是你的 属性,在你的控制之下,就会有麻烦.这就是你收到警告的原因。因此,如果那是您正在做的,那么您的代码总是严重损坏,需要修复。

但是如果您的代码中只有 @属性 声明,但您 知道 它实际上是 UITableViewController 属性,没有什么坏处完成,但删除 @属性 因为它是错误的。

我也遇到过类似的问题。我通过以下方法解决了这个问题。在您的 .m 文件中,在 @implementation

下写入 @dynamic tableView

希望您的问题得到解决。

自定义 UITableViewCell 创建一个名为 imageView 的新 属性 时遇到了类似的问题。由于名为 imageView 的 属性 已经存在,所以我一直收到错误消息。我只是将名称更改为 projectImageView 并且它起作用了。