0

我试图将数据从一个 NSWindowController 传递到另一个。我有 2 个已经实例化的 NSWindowController,并且它们各自的 NIB 已加载到屏幕中,实际上首先加载的是 firstWindowController,从用户那里获取一些输入并进行一些计算并将它们保存在几个变量和 IBOutlets 中。在 firstWindowController 中的用户操作(NSButton)时,secondWindowController 加载第二个 Nib 窗口。让我们说:

第一个窗口控制器.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 屏幕。以同样的方式,一个数据变量和两个 IBoulet 都获得了一些赋值。为简单起见省略。

第二个窗口控制器.h

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

第二个窗口控制器.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 的实例已经在我的应用程序委托中创建,它负责加载第一个窗口笔尖。

有什么帮助来完成这项工作吗?对更多或更少类似问题的其他答案对我没有帮助。

4

1 回答 1

0

您需要firstWindowControllersecondWindowController. 尝试这个:

在你的 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 回答