Установка делегатов на "себя" из метода класса - PullRequest
4 голосов
/ 18 июля 2011

Скажем, я хочу вызвать UIActionSheet из метода вспомогательного класса. Я хочу, чтобы вспомогательный класс (не объект) был делегатом этой таблицы действий. Так что я передаю себя делегату.

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"MyTitle"
                                                         delegate:self
                                                cancelButtonTitle:nil
                                           destructiveButtonTitle:@"Delete" 
                                                otherButtonTitles:nil];

Мой вспомогательный класс реализует методы делегата как методы класса, и все работает отлично. Но я получаю предупреждение от компилятора, который говорит: «Несовместимый указатель», отправляя класс, когда ожидается идентификатор. Я также попробовал [самообучение] и получил то же предупреждение.

Как мне избежать этого предупреждения?

Ответы [ 4 ]

9 голосов
/ 18 июля 2011

Просто установите делегата на [self self].

7 голосов
/ 18 июля 2011

Вы можете избавиться от предупреждения, приведя self к типу id.

[[UIActionSheet alloc] initWithTitle:@"MyTitle"
                            delegate:(id<UIActionSheetDelegate>)self
                   cancelButtonTitle:nil
              destructiveButtonTitle:@"Delete" 
                   otherButtonTitles:nil];

Это скажет компилятору обрабатывать значение как id, что соответствует протоколу UIActionSheetDelegate.

0 голосов
/ 10 октября 2013

Я решаю это, добавив в объявлении интерфейса файла класса .h

0 голосов
/ 18 июля 2011

Вы не получите предупреждение, пока не передадите указатель объекта в метод.Ожидается id, где вы даете Class, то есть typedef struct objc_class *Class;.

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