3

私は分割ビュー コントローラーを使用してアプリに取り組んでおり、メイン データ クラスをアプリ デリゲートに格納して、複数のビュー (MasterView、DetailView、およびいくつかのポップアップ) からアクセスできるようにしたいと考えています。

私は少し初心者で、エラーが発生する理由がわかりません。

AppDelegate.m:31:26: プロパティ 'dataController' がタイプ 'MasterViewController' のオブジェクトに見つかりません

以下は関連するコードです - どんな助けでも大歓迎です。ありがとう。

AppDelegate.h

#import <UIKit/UIKit.h>

@class EventClassDataController;
@class MasterViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

AppDelegate.m

#import <UIKit/UIKit.h>

@class EventClassDataController;
@class MasterViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

MasterViewController.h

#import <UIKit/UIKit.h>

@class DetailViewController;
@class EventClassDataController;

@interface MasterViewController : UITableViewController

@property (strong, nonatomic) EventClassDataController *dataController;
@property (strong, nonatomic) DetailViewController *detailViewController;

@end

MasterViewController.m

#import "MasterViewController.h"
#import "DetailViewController.h"
#import "EventClassDataController.h"
#import "EventClass.h"

@interface MasterViewController ()

@end

@implementation MasterViewController

@synthesize detailViewController, dataController;

- (void)awakeFromNib
{
    self.clearsSelectionOnViewWillAppear = NO;
    self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
    [super awakeFromNib];

    // Initialize event data
    self.dataController = [[EventClassDataController alloc] init];
}

EventClassDataController.h

#import <Foundation/Foundation.h>

@class EventClass;

@interface EventClassDataController : NSObject

@property (nonatomic, copy) NSMutableArray *masterEventList;

-(NSUInteger)countOfList;
-(EventClass *)objectInListAtIndex:(NSUInteger)theIndex;
-(void)addNewEvent:(EventClass *)event;
-(void)removeEvent:(EventClass *)event;

@end
4

1 に答える 1

0

追加する必要があります

#import "MasterViewController.h"

AppDelegate.m に。

移植:

エラー メッセージから、AppDelegate の 26 行目にある MasterViewController のプロパティにアクセスしようとしていることがわかります。ただし、AppDelegate クラスには前方宣言 ("@class MasterViewController") しかなく、MasterViewController の実際のヘッダー ファイルは含まれません。これが意味することは、AppDelegate は、プロジェクトのどこかに MasterViewController という名前のクラスが存在することを知っているということです...しかし、それが知っているのはそれだけです。AppDelegate は、MasterViewController の内容、つまり、MasterViewController が宣言するプロパティまたはメソッドについて何も知りません。

ヘッダー ファイルで @class を使用する理由は、次のような @interface にプロパティを含めることができるようにするためです。

@property (nonatomic, strong) MasterViewController * appDelegatesReferenceToMasterViewController;

AppDelegate.h に MasterViewController.h をインポートする必要はありません。このようにして、プロジェクト内の他のファイルは、誤って MasterViewController.h をインポートすることなく、AppDelegate.h をインポートできます。

翻訳:

コードを書く:

@class MasterViewController;

は、コンパイラに次のように言っているようなものです。

よ...コンパイラ。このヘッダー ファイルで MasterViewController と呼ばれるものについて話しますが、MasterViewController が何であるかはわかりません。大丈夫だよー。

ただし、後でコードを記述した後、.m ファイルに次のように記述します。

... masterViewController.dataController ...

コンパイラは次のように応答します。

おっ、おっ、おっ。ヘッダー ファイルに MasterViewController 型の変数が含まれているだけで大​​丈夫でした。問題はなく、心配する必要はないとのことでした。しかし、ここでは、私が何も知らない MasterViewController の側面を使用しようとしています。これが合法かどうかはどうすればわかりますか? クールじゃない仲間。

于 2013-01-21T22:28:41.673 に答える