Автосинтез свойств не синтезирует свойство - новое предупреждение 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

Ответ 1

Если вы используете UITableViewController, тогда tableView уже синтезирован. (т.е. self.tableView - это tableView UITableViewController).

Ответ 2

У меня тоже была аналогичная проблема. Я решил это следующим образом. Внутри вашего файла .m напишите @dynamic tableView под @implementation

Я надеюсь, что ваша проблема будет решена.

Ответ 3

Что изменилось? Компилятор стал более умным.

Вероятно, вы подклассифицируете UITableViewController.

UITableViewController уже имеет свойство с именем tableView. Он уже синтезирован или реализован иначе в UITableViewController. Таким образом, предупреждение сообщает вам, что вы не получаете свое собственное свойство tableView, но получаете тот, который предоставляется UITableViewController.

Очевидно, если вы не знали о tableView в UITableViewController, и если вы ошибочно предположили, что это ваша собственность, под вашим контролем, возникнут проблемы. Вот почему вы получаете предупреждение. Итак, если это то, что вы делали, тогда ваш код всегда был сильно сломан и нуждается в исправлении.

Но если у вас есть только объявление @property в коде, но вы знаете, что на самом деле это свойство UITableViewController, никакого вреда не сделано, но удалите @property, потому что это неправильно.

Ответ 4

Была аналогичная проблема с пользовательским UITableViewCell, создающим новое свойство, называемое imageView. Поскольку свойство с именем imageView уже существует, я продолжал получать сообщение об ошибке. Я просто сменил имя на projectImageView, и он сработал.