我注意到我的OSX应用程序(基于文档)有一种奇怪的行为,我觉得我在这里做错了。
当我从Xcode运行我的应用程序时,它运行良好,一切正常。 如果我按下命令+ Q退出应用程序,这一切都很好。
当我通过按Xcode中的停止按钮退出应用程序时,应用程序会像往常一样停止,但是当我下次运行它时,我的windowControllerDidLoadNib没有被调用,直到我点击停靠菜单中的应用程序图标(应用程序是虽然跑了,我检查了活动监视器。)
Document.m
- (NSString *)windowNibName
{
return @"Document";
}
- (void)windowControllerDidLoadNib:(NSWindowController *)windowController
{
[super windowControllerDidLoadNib:windowController];
}
我真的对这种行为感到困惑,我不知道我做错了什么,或者这是不是应该如何。
非常感谢任何形式的帮助
答案 0 :(得分:0)
只需要调用下面的文档控制器方法来加载nib方法
NSDocumentController * docC=
[[yourDocumentCont alloc]init];
[docC openDocument:self]
答案 1 :(得分:0)
windowControllerDidLoadNib在需要窗口控制器时被调用。当您单击停靠图标时,它将打开一个新文档,或者创建一个新文档,这是一种系统样式。在后台应用程序不需要窗口,所以我认为没有错。
答案 2 :(得分:0)
仅在
时才在NSDocument子类中调用windowControllerDidLoadNibwindowController所有者是XIB的Document。在XCode中,XIB所有者是NSDocument子类,而不是NSWindowController子类
覆盖windowControllerDidLoadNib方法
从NSWindowController的实施:
...
[self windowDidLoad]
if ([self owner] != self) {
if ([self respondsToSelector:@selector(windowControllerDidLoadNib:)]) {
[[self owner] windowControllerDidLoadNib:self];
}
}
...
如果您需要此行为,只需将此代码添加到NSWindowController子类
即可- (void)windowDidLoad {
[super windowDidLoad];
if ([self owner] == self && [self document]) {
if ([[self document] respondsToSelector:@selector(windowControllerDidLoadNib:)]) {
[[self document] windowControllerDidLoadNib:self];
}
}
}