如果您有一个控制特定窗口的控制器,那么您绝对应该使用NSWindowController
子类,如果只是因为NSWindowController
为您处理一些更复杂的 nib 加载和内存管理问题。
除非新窗口中的 Sphere 模型显示的数据集与主控制器中的不同,否则您不需要为新控制器创建新模型。您可以在主控制器中引用球体实例。
像这样的东西:
。H:
#import <Cocoa/Cocoa.h>
@class Sphere;
@interface FrequenciesController : NSWindowController
{
Sphere* sphere;
}
- (id)initWithSphere:(Sphere*)aSphere;
@end
米:
#import "FrequenciesController.h"
#import "Sphere.h"
@implementation FrequenciesController
- (id)initWithSphere:(Sphere*)aSphere
{
self = [super initWithWindowNibName:@"NameOfYourNib"];
if (self)
{
sphere = [aSphere retain];
}
return self;
}
- (void)dealloc
{
[sphere release];
[super dealloc];
}
@end
要创建窗口,您只需在主控制器中执行类似的操作,假设您已声明frequenciesController
为 ivar:
- (IBAction)showFrequenciesWindow:(id)sender
{
if(!frequenciesController)
{
frequenciesController = [[FrequenciesController alloc] initWithSphere:self.sphere];
[frequenciesController showWindow:self];
}
}