NSPanel没有显示。

时间:2013-07-30 01:57:05

标签: objective-c cocoa interface-builder nspanel

我的方法可能全部错误,所以我感谢您的耐心等待。

我的主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以及无限的初始化循环。我错过了一些明显的东西吗?

非常感谢。

1 个答案:

答案 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是否已关闭。