Почему GCC -Wselector и -Wundeclared-selector предупреждают об объявленных селекторах? - PullRequest
3 голосов
/ 07 февраля 2012

Описание опций -Wselector и -Wundeclared-selector в GCC заставляет их звучать как прекрасные инструменты программирования для защиты от опечаток в выражениях Objective-C @selector().Я получаю такие предупреждения:

Unimplemented selector 'reloadData'

, указывающие на такие строки:

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

Эта строка кода довольно распространена в нашей кодовой базе.Данные загружаются асинхронно, и после загрузки указанная выше строка кода используется для сигнализации UITableView о перезагрузке (в основном потоке, поскольку вызов UIKit из фоновых потоков - плохая идея).

Мой вопрос состоит из нескольких частей:

  1. Является ли приведенная выше строка кода неверной?Есть ли лучший шаблон для сигнализации UITableView в главном потоке для перезагрузки своих данных?
  2. Почему GCC предупреждает об этом, когда в UITableView.h явно есть объявление для селектора reloadData?
  3. Есть ли способ заставить GCC предупреждать о необъявленных селекторах, не заставляя его жаловаться на селекторы, которые явно объявлены?

1 Ответ

3 голосов
/ 07 февраля 2012

Да, я фанат -Wundeclared-selector.Я не видел, чтобы эта проблема возникла.Вы #import <UIKit/UIKit.h> в этом конкретном файле (или в вашем .pch)?Я не могу воспроизвести эту проблему в простой программе с -Wundeclared-selector.

  • Создать однопользовательский проект iOS с раскадровкой
  • Удалите UITableView на главном экране.Провод к tableView IBOutlet
  • Включение предупреждения «Необъявленный селектор»
  • Введите строку кода в viewDidLoad
  • Build

Измените reloadData на reloadDat, и я получу предупреждение (как и ожидалось):

Undeclared selector 'reloadDat'

Вы говорите, что получаете «Не реализованный селектор reloadData».Это действительно предупреждение, или вы хотели ввести «Необъявленный»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...