2013-07-18 3 views
3

Я пишу просто кусок кода, но принимая ошибку, что «ожидаемый тип @line - (Недействительными) backButtonTapped: (TopBarViewController *) topBarViewController;«ожидаемый тип» при реализации делегата

Что не так с этим ?

@protocol TopBarDelegate 

- (void)backButtonTapped:(TopBarViewController *) topBarViewController; 

@end 


@interface TopBarViewController : UIViewController 
{ 

} 

@property (assign, nonatomic) id <TopBarDelegate> delegate; 

-(void) backButtonPressed:(id)sender; 

-(void) menuButtonPressed:(id)sender; 

@end 

ответ

10

Добавьте следующую строку в верхней части. Поскольку протокол TopBarDelegate определен выше класса TopBarViewController, в точке, определить протокол, компилятор не знает, есть класс называется TopBarViewController. Эта строка сообщает там действительно есть класс с таким именем, которое где-то определено.

@class TopBarViewController; 
3

Проблема заключается в том, что при анализе этого файла, компилятор не имеет представления о том, что TopBarViewController есть. Это просто случайный токен, который не знает, как обрабатывать. Этот класс определяется в другом файле, поэтому компилятор не смотрит на него при разборе этого.

У вас есть два варианта:

  • Импорт заголовочный файл, который определяет этот класс.
  • Используйте команду @class, чтобы сообщить компилятору, что это класс, определенный в другом месте.

Вообще говоря, последний вариант лучше, поскольку он требует меньше работы от имени компилятора и не может привести к циклическому импорту.

+0

Вариант 1 является жизнеспособным в этом случае, поскольку он является одним и тем же заголовком. – rmaddy

+0

А, я вижу, я немного исказил код. Проблема в том, что, как я заявлял, проблема, кроме как во внешнем файле, выше декларации самого класса. Первый вариант не является жизнеспособным, второй вариант - то, что вы должны использовать. – Jim

+0

И, конечно же, мой комментарий должен был быть прочитан «is * not * жизнеспособный». – rmaddy

Смежные вопросы