0

Mac OS Xアプリケーションを作成していて、クラスにお互いを知らせようとしています

コントローラはView1とView2を作成します

BaseViewにはControllerのプロパティがあります

View1とView2はBaseViewから拡張されています

これが私の例です

コントローラクラス

#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

BaseViewクラス

#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'

私は何を間違えますか?

4

2 に答える 2

1

ヘッダー ファイル (例) で前方宣言を使用する場合、ヘッダー@class View1;は必要ありません#import

View1.h で @class を宣言していないため、エラーが発生します。それにもかかわらず、メソッド宣言などが必要な場合は、ヘッダー ファイルで前方宣言を使用し、必要なヘッダーを実装ファイルにインポートすることをお勧めします。これにより、ヘッダー ループも回避できます。

あなたのコードは次のようになります

@class BaseView; 
@interface View1 : BaseView

@end  

////// 

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

@end 
于 2012-08-31T12:49:29.850 に答える
0

問題はコードにない可能性があると思います。

それらは同じ相対フォルダーにありますか? BaseView別の場所にありますか?この場合、プロジェクト設定に移動して調整するUser Header Search Paths必要がある場合があります

また、プロジェクトナビゲーターでファイルをクリックして、現在実行しているターゲット用にすべてのファイルがセットアップされていることを確認し、右側のメニューでマークされているターゲットを確認します

于 2012-08-31T12:47:45.377 に答える