我的方法可能全部错误,所以我感谢您的耐心等待。
我的主XIB文件中有一个按钮,链接到我的document.m文件中的此方法:
- (IBAction)showTagModal:(id)sender {
if (!_FileTagWindowController){
_FileTagWindowController = [[FileTagWindowController alloc]init];
}
[_FileTagWindowController showWindow:self];
}
_FileTagWindowController被声明为document.h中的一个属性,并在调用该方法时使用断点,据我所知正确初始化,然而_windowNibName和_window仍为零。
FileTagWindowController.h看起来像这样。
#import <Cocoa/Cocoa.h>
@interface FileTagWindowController : NSWindowController{
}
@property (strong) IBOutlet NSArrayController *tagsArray;
- (IBAction)saveContext:(id)sender;
@end
FileTagWindowController.m如下所示:
#import "FileTagWindowController.h"
@interface FileTagWindowController ()
@end
@implementation FileTagWindowController
- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
// Initialization code here.
}
return self;
}
- (void)windowDidLoad
{
[super windowDidLoad];
NSLog(@"Window Did Load!");
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
- (IBAction)saveContext:(id)sender {
}
@end
在我的FileTagWindowController.xib中,我将文件所有者设置为FileTagWindowController作为自定义类。我将文件所有者的“窗口”插座链接到窗口(NSPanel)。这应该是正确的吗? WindowDidLoad中的NSLOG语句永远不会被调用。我尝试在FileTagWindowController.m中使用[super initWithWindowNibName]但不仅崩溃了应用程序,还破坏了Xcode以及无限的初始化循环。我错过了一些明显的东西吗?
非常感谢。
答案 0 :(得分:1)
尝试以下内容。
// document.h
#import "FileTagWindowController.h"
@property (strong) filetagWindowController *FileTagWindowController;
// document.m
@synthesize filetagWindowController;
- (IBAction)showTagModal:(id)sender {
if (self.filetagWindowController == nil) {
self.filetagWindowController = [[FileTagWindowController alloc] initWithWindowNibName:@"FileTagWindowController"];
}
[filetagWindowController showWindow:self];
[[filetagWindowController window] setReleasedWhenClosed:NO];
[NSApp runModalForWindow:filetagWindowController.window];
filetagWindowController = nil;
}
您可能还想调用 NSWindowWillCloseNotification 来观察其状态,并查看filetagWindowController是否已关闭。