2013-07-18 69 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

當然,我的評論應該已經讀過「是*不可*」。 – rmaddy