2011-07-30 107 views
0

我試過尋找這個問題,但似乎無法找出我做錯了什麼。Objective C屬性

這裏是我的控制器頭:

#import <UIKit/UIKit.h> 

@interface BabyLearnViewController : UIViewController { 
    UIButton *btnImage; 
    MediaManager* myMediaManager; 
} 
@property (nonatomic, retain) IBOutlet UIButton *btnImage; 
@property (retain) MediaManager* myMediaManager; 

- (IBAction)setNewImage; 

@end 

這裏是我的控制器類:

#import "BabyLearnViewController.h" 
#import "MediaManager.h"; 

@implementation BabyLearnViewController 

@synthesize btnImage; 
@synthesize myMediaManager; 

我收到錯誤:

error: expected specifier-qualifier-list before 'MediaManager' 
error: no declaration of property 'myMediaManager' found in the interface 

任何想法?如果你有一個循環引用,通常會出現第一個錯誤。 'MediaManager'沒有引用任何其他內容。有任何想法嗎?

回答

8

由於在頭文件中使用時沒有提及MediaManager類,所以編譯器無法弄清楚「MediaManager」是什麼,併發出錯誤。在頭文件中使用前向聲明聲明該類,讓編譯器知道MediaManager實際上是一個類:

@class MediaManager; 
@interface BabyLearnViewController : UIViewController { 
    ... 

P.S.作爲替代方案,您可以在頭文件中導入MediaManager.h,但首選使用前向聲明。

+1

爲什麼使用前向聲明是首選? –

+0

@Rudy,有前向聲明你不會碰到頭之間的循環依賴關係+少的頭可能會提高編譯時間 – Vladimir

+0

好的,理解,謝謝。 –

2

廣場#import "MediaManager.h" 這BabyLearnViewController

的頭文件
1

嘗試添加@class媒體管理;之前@interface