Objective-C - Отсутствует дозорный в методе отправки? - PullRequest
1 голос
/ 17 марта 2012

Я пытаюсь переопределить метод init для UIAlertView и настроить его, и я получаю следующее предупреждение?«Отсутствует стража при отправке метода».

Что означает это предупреждение и как его разрешить?

- (id)initWithTitle:(NSString *)title 
            message:(NSString *)message 
           delegate:(id)delegate 
  cancelButtonTitle:(NSString *)cancelButtonTitle 
  otherButtonTitles:(NSString *)otherButtonTitles, ...
{
    if (self = [super initWithTitle:title 
                            message:message 
                           delegate:delegate 
                  cancelButtonTitle:cancelButtonTitle 
                  otherButtonTitles:otherButtonTitles]) 
    {
        // Customize alertView
    }

    return  self;
}

Ответы [ 4 ]

6 голосов
/ 17 марта 2012

Кажется, проблема в том, что initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles: variadic, т. Е. Принимает произвольное количество аргументов после последнего параметра.Когда вы вызываете метод базового класса, у вас возникают две проблемы:

  • вы не передаете все аргументы, которые предоставил вызывающий вашей версии, и
  • вы не передаетепоследний nil после последнего аргумента (который, как я предполагаю, это то, на что жалуется компилятор).

Как уже отмечали другие, UIAlertView не предназначен для подкласса.Попробуйте использовать другой подход (вместо этого используйте функции / методы удобного конструктора).

3 голосов
/ 17 марта 2012

Взгляните на документацию UIAlertView , в частности:

Примечания по подклассам

Класс UIAlertView предназначен для использования как естьи не поддерживает создание подклассов.Иерархия представления для этого класса является закрытой и не должна изменяться.

Это означает, что переопределение метода initWithTitle не будет полезным.Вам нужно будет попробовать другой подход - возможно, если вы поделитесь тем, чего пытаетесь достичь, люди смогут предложить альтернативу (например, с помощью категории).

1 голос
/ 17 марта 2012

Это предупреждение, потому что вы не ставите nil (страж) в конце вызова метода variadic.Но в любом случае вам не повезло с переопределением метода вариации.См. этот вопрос для более.

0 голосов
/ 17 марта 2012

Это потому, что вы не можете подкласс UIAlertView. Из документов :

Примечания по подклассам

Класс UIAlertView предназначен для использования как есть и не поддерживает создание подклассов. Иерархия представления для этого класса закрытый и не должен быть изменен.

...