У меня есть несколько подклассов UITableViewCell от 2,0 дней, которые переопределяют устаревший обозначенный инициализатору:не __deprecated__ запуск компилятора предупреждения с подклассом
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
Этот код делает некоторые дополнительные настройки для ячейки, и я преобразуя классы использовать новый назначенный intializer:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
что странно, в том, что единственное место, компилятор бросает предупреждение о методе устаревшим в самих подклассах, когда они называют
[super initWithStyle:style reuseIdentifier:reuseIdentifier]
Все классы, которые используют эти подклассы, не получают предупреждения. Для того, чтобы попытаться заставить его, я добавил следующие заголовки подклассов:
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier __attribute__ ((deprecated));
Как ни странно, теперь всех устаревание предупреждения ушло.
Одна вещь, которую я не пробовал, состоит в том, чтобы преобразовать подклассы, чтобы переопределить новый назначенный инициализатор, и посмотреть, будут ли места в коде, использующем эти ячейки, получать предупреждение о высвечивании из суперкласса.
Мне все еще кажется странным, что после того, как я добавил устаревший атрибут, все предупреждения ушли.
Любые идеи, почему это было бы?
Я думаю, что вы один к чему-то там. Я забыл о возврате alloc (id), и компилятор не знал наверняка. Бьюсь об заклад, если я изменю подклассы, чтобы просто переопределить новый DI, то теперь использование классов будет помечено из-за устаревания в UITableViewCell. Пора попробовать. –
Ну, я просто изменил все подклассы, чтобы переопределить initWithStyle: reuseIdentifer: и все использования initWithFrame: reuseIdentifer: по-прежнему не помечены. Хотя другие элементы UITableViewCell (т. Е. SetText :). Не то, чтобы это было абсолютно точно, но когда я щелкнул правой кнопкой мыши initWithFrame: reuseIdentifier: и выберите «Перейти к определению», я попал прямо в заголовок UITableViewCell, у которого есть отметки об отставке. Перед моим изменением я также получил все мои подклассы. –
«Переход к определению» Xcode опирается на индексатор, который не совпадает с компилятором. Попробуйте выполнить листинг результата + alloc в подклассу соты. Причина, почему -setText: определенно будет работать, потому что вы вызываете ее на переменной соответствующего типа. Аналогичным образом должно работать следующее: 'MyTableViewCell * cell = [MyTableViewCell alloc]; [cell initWithFrame: frame reuseIdentifier: ident]; ' –