Найдено несколько методов с именем 'tag' - PullRequest
5 голосов
/ 11 января 2012

почему я получаю это предупреждение в своем коде ниже:

- (IBAction)shareThisActionSheet:(id)sender
{
    int row = [sender tag]; //warning is here! Multiple methods named 'tag' found
    ...

Ответы [ 3 ]

13 голосов
/ 11 января 2012

Описание

Проблема в том, что компилятор видит более одного метода с именем tag в текущей единице перевода, и эти объявления имеют разные типы возврата.Один из них, вероятно, будет -[UIView tag], что возвращает NSInteger.Но также видно еще одно объявление tag, возможно:

@interface MONDate
- (NSString *)tag;
@end

, тогда компилятор видит двусмысленность - это sender a UIView?или это MONDate?

Компилятор предупреждает вас, что он должен угадать , что такое тип sender.Это действительно требует неопределенного поведения.

Разрешение

Если вы знаете тип параметра, укажите его:

- (IBAction)shareThisActionSheet:(id)sender
{
 UIView * senderView = sender;
 int row = [senderView tag];
 ...

иначе, используйте что-нибудьнапример, условие isKindOfClass: для определения типа, который объявляет переменную, как перед отправкой сообщения.как показывают другие ответы, вы также можете набрать.

4 голосов
/ 11 января 2012

Проблема в том, что sender определяется как (id) объект. Во время компиляции xcode не знает, какие объекты будут переданы вашей функции.

Если вы напишите эту функцию для определенного типа объекта, вы могли бы написать, например,

- (IBAction)shareThisActionSheet:(UIButton*)sender

или вы можете указать компилятору тип объекта с помощью вызова

int row = [(UIButton*)sender tag]; 
2 голосов
/ 11 января 2012

Бастиан прав, вы должны преобразовать своего отправителя в такую ​​кнопку:

UIButton * button = (UIButton *)sender;
int row = button.tag;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...