web-dev-qa-db-ja.com

自動プロパティ合成はプロパティを合成しません-新しい警告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
12
DevC

UITableViewControllerを使用している場合、tableViewはすでに合成されています。 (つまり、self.tableViewはUITableViewControllerのtableViewです)。

16
Mark McCorkle

私も同様の問題に直面しました。私はこれを次の方法で解決しました。 .mファイル内の@dynamic tableViewの下に@implementationを書き込みます

あなたの問題が解決されることを願っています。

15
fozoglu

変化したこと?コンパイラはより賢くなっています。

おそらくUITableViewControllerをサブクラス化しています。

UITableViewControllerには、tableViewという名前のプロパティがすでにあります。 UITableViewControllerですでに合成または実装されています。したがって、警告は、独自のtableViewプロパティを取得していないが、UITableViewControllerによって提供されているプロパティを取得していることを示しています。

明らかに、UITableViewControllerのtableViewを認識しておらず、これがyourプロパティであると誤って想定した場合、制御下で問題が発生します。そのため、警告が表示されます。したがって、それがあなたがしていることである場合、あなたのコードは常にひどく壊れていて、修正する必要があります。

ただし、コードに@property宣言があるだけで、それが実際にはUITableViewControllerプロパティであることをknowしている場合は、害はありませんが、@ propertyは間違っているため、削除してください。

11
gnasher729

ImageViewと呼ばれる新しいプロパティを作成するカスタムUITableViewCellで同様の問題がありました。 imageViewという名前のプロパティがすでに存在していたため、エラーメッセージが表示され続けました。名前をprojectImageViewに変更しただけで、機能しました。

1
NSCoder