如何从NSWindowController
中的模型类调用数组? {1}在AppDelegate中设置为模型类valueArray
:
ValueItem
和
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
ValueItem *vi;
ResultWindowController *rwc;
IBOutlet NSArrayController *outArrayController;
}
调用@implementation AppDelegate
....
- (IBAction)pushOk:(NSButton *)sender
{
self->vi = [[ValueItem alloc]init];
[vi setValueArray:[outArrayController arrangedObjects]];
NSLog(@"vi.valueArray is:%@", vi.valueArray);
if (rwc)
{
[rwc close];
}
rwc = [[ResultWindowController alloc] init];
[rwc setShouldCascadeWindows:NO];
[rwc showWindow:self];
}
返回数组内容就好了。但是,当我尝试在我的其他NSLog(@"vi.valueArray is:%@", vi.valueArray);
中使用它时,它始终返回NSWindowController
:
NULL
和
@interface ResultWindowController : NSWindowController
{
ValueItem *vi;
NSNumber *resultAverage;
}
我找不到丢失的链接?我在这里想念什么? 谢谢!
答案 0 :(得分:1)
您的两个班级中有两个独立且无关的ValueItem *vi
个实例。这就解释了为什么你在第一堂课中设置它,但在第二节vi
仍然是nil
。
你应该能够通过这样做来解决它:
rwc = [[ResultWindowController alloc] init];
[rwc setVi:self->vi]; // <--- this
[rwc setShouldCascadeWindows:NO];
[rwc showWindow:self];
为了做到这一点,你应该在RootWindowController
中定义一个合适的setter方法。
或者,如果您想让AppDelegate充当模特,您可以这样做:
ValueItem *vi = [(AppDelegate*)[UIApplication sharedApplication].delegate vi];
当您需要访问vi
时。然后,您可以删除vi
中声明的RootWindowController
ivar(因为您可以直接访问应用代理中的那个)。
实际上,创建一个充当模型的单独类会更好。它可能是一个单身人士,您可以像这样访问它:
ValueItem *vi = [MyModel sharedModel].vi;
更具可读性和简洁性。