-1

我的处理方法可能错了,所以我很感谢你的耐心。

我的主 XIB 文件中有一个按钮链接到我的 document.m 文件中的此方法:

- (IBAction)showTagModal:(id)sender {
    if (!_FileTagWindowController){
        _FileTagWindowController = [[FileTagWindowController alloc]init];
    }
    [_FileTagWindowController showWindow:self];
}

_FileTagWindowController 被声明为 document.h 中的一个属性,并在调用该方法时使用断点,据我所知是正确初始化,但是 _windowNibName 和 _window 仍然是 nil

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 中,我将File Owner设置为 FileTagWindowController 作为自定义类。我将文件所有者的“窗口”插座链接到窗口(NSPanel)。这就是所有应该要求的正确吗?WindowDidLoad 中的 NSLOG 语句永远不会被调用。我尝试在 FileTagWindowController.m 中使用 [super initWithWindowNibName] ,但这不仅会导致应用程序崩溃,还会导致 Xcode 崩溃,并且会出现无休止的初始化循环。我在这里遗漏了一些明显的东西吗?

非常感谢。

4

1 回答 1

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

于 2013-07-30T03:34:44.927 回答