Как остановить предупреждение для UIView может не отвечать на селектор - PullRequest
9 голосов
/ 03 декабря 2010

У меня есть класс, который имеет UIView в качестве свойства. Иногда я прохожу в UILabel; иногда UITextField. Независимо от того, что я передаю, я хочу, чтобы класс установил текст. В настоящее время я делаю это, которая работает:

if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer)
    [self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]];

Проблема в том, что это выдает предупреждение, потому что, хотя я проверяю respondsToSelector, Xcode не знает, что мой UIView ответит на setText:. Как я могу удалить это предупреждение?

Я знаю, что могу специально проверить, является ли это TextField или Label, и затем привести его к TextField или Label, соответственно, но это будет проблемой, и если у меня когда-либо будет больше типов представлений, я нужно добавить еще несколько строк кода для каждой.

Я думал о создании собственного протокола, а затем о том, чтобы у моего класса был идентификатор в качестве типа для viewToUpdate ... но, конечно, UITextField и UILabel не соответствовали бы этому протоколу ...

1 Ответ

16 голосов
/ 03 декабря 2010

попробуйте просто привести его как id:

if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer)
    [(id)self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...