0

ある NSWindowController から別の NSWindowController にデータを渡そうとしています。既にインスタンス化された 2 つの NSWindowController があり、それぞれの NIB が画面に読み込まれています。実際、最初に firstWindowController を読み込み、ユーザーから入力を取得し、計算を行って、いくつかの変数と IBOutlets に保存します。firstWindowController でのユーザー アクション (NSButton) により、secondWindowController が 2 番目の Nib ウィンドウをロードします。言いましょう:

firstWindowController.h

@class secondWindowController;

@interface firstWindowController : NSWindowController
{
secondWindowController *_secondWindowController;
}
@property long double onedata; 
@property (strong) IBOutlet NSTextField *rZab;
@property (strong) IBOutlet NSTextField *xZab;
@end

firstWindowController.m には、_secondWindowController をインスタンス化するコードがあり、すべての @property の変数とオブジェクトを合成し、関連付けられた nib スクリーンをロードします。同様に、onedata 変数と両方の IBOulet にいくつかの値が割り当てられます。簡単にするために省略します。

secondWindowController.h

@interface secondeWindowController: NSWindowController
long double newdata;
-(void)getDataFromFirstWC;
@end

secondWindowController.m

#import "firstWindowController.h"
#import "secondWindowController.h"
#import "myAppDelegate.h"

@implementation secondWindowController
-(void)getDataFromFirstWC
{
newdata = 0.0;
newdata = (_firstWindowController.onedata); 
// Compilation fails here...
}
@end

これはコンパイルされません。_firstWindowController のインスタンスが認識されません??。宣言されていない識別子 '_firstWindowController' の使用

_firstWindowController のインスタンスはアプリケーション デリゲートで既に作成されており、最初のウィンドウ nib をロードする責任があります。

これを行うための助けはありますか?類似性の高い質問や類似性の低い質問に対する他の回答は役に立ちませんでした。

4

1 に答える 1

0

firstWindowControllerに自分のインスタンスが必要ですsecondWindowController。これを試して:

seconWindowController.hで:

@class firstWindowController //<-- add this
@interface secondeWindowController: NSWindowController
{
firstWindowController *fwc; //<-- and this
}

long double newdata;
-(void)getDataFromFirstWC;
@end

seconWindowController.mで:

#import "firstWindowController.h"
#import "secondWindowController.h"
#import "myAppDelegate.h"

@implementation secondWindowController
-(void)getDataFromFirstWC {
newdata = 0.0;
newdata = (fwc.onedata); //<-- add this and it should work
NSLog(@"newdata is: %f", newdata);
}
@end

これまでのコードを理解している限り、のインスタンスを作成する必要はありませsecondWindowControllerfirstWindowController。幸運を!

于 2013-03-13T19:45:16.297 に答える