2012-08-31 66 views
0

我想提出一個Mac OS X的應用程序,我試圖讓類知道對方正向類屬性目標C

控制器創建視圖1和視圖2

基本視點具有控制器

的屬性

視圖1和視圖2從基本視點

這裏延伸是我的榜樣

控制器類

#import <Cocoa/Cocoa.h> 
#import "View1.h" 
@class View1; 
@interface Controller : NSViewController 
{ 
    View1 *_view1; 
} 
@end 

////// 

#import "Controller.h" 

@implementation Controller 

- (id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     _view1 = [[View1 alloc] initWithFrame:CGRectZero]; 
     _view1.controller = self; 
    } 
    return self; 
} 
@end 

基本視點類

#import <Cocoa/Cocoa.h> 
#import "Controller.h" 
@class Controller; 
@interface BaseView : NSView 
{ 
    Controller *_controller; 
} 

@property (nonatomic,assign) Controller *controller; 

@end 

////// 

#import "BaseView.h" 

@implementation BaseView 

@synthesize controller = _controller; 

@end 

查看示例類

#import "BaseView.h" 

@interface View1 : BaseView 

@end 

////// 

#import "View1.h" 

@implementation View1 

@end 

但它給我這個錯誤:

Controller.m:23:16: Property 'controller' cannot be found in forward class object 'View1' 

我該怎麼辦錯了嗎?

+1

一旦你做的進口,你不需要做@class控制器指令 – Ismael

回答

1

當您在頭文件中使用前向聲明時(例如@class View1;),您不需要#import標頭。

在你的View1.h中你沒有聲明@class,那是你得到錯誤的地方。不過,我建議你在你的頭文件中使用forward聲明,並在你需要方法聲明等時在你的實現文件中導入需要的頭文件 - 這也會阻止你從頭文件循環中獲取頭文件。

你的代碼看起來應該像

@class BaseView; 
@interface View1 : BaseView 

@end 

////// 

#import "View1.h" 
#import "BaseView.h" 
@implementation View1 

@end 
+0

好吧我改變了,但是當我想要做:_view1.controller =自我在我的控制器類我得到這個錯誤:屬性'控制器'無法找到轉發類對象'View1' –

0

我認爲這個問題可能不在你的代碼中。

他們在相同的相對文件夾? BaseView在不同的位置?你可能要到你的項目設置和調整User Header Search Paths,如果是這樣的話

此外,請確保您的所有文件都設置爲您當前正在運行的目標,通過點擊在項目導航,並在右側菜單中檢查標記爲

+0

他們都在同一個文件夾,所有被添加到目標,我不你認爲它有問題嗎? –