在启动时,阻止基于文档的应用重新打开退出时打开的未保存,未编辑的空文档

时间:2018-11-20 00:06:18

标签: macos nsapplication-delegate

在一个简单的基于NSDocument子类的rtf编辑器中,当应用启动时,它将创建一个无标题的文件。这是一种理想的行为。但是,如果我使用打开,未编辑和未保存的文档(空!)退出应用程序,则该应用程序将在下次启动时恢复该文档。

如何设置此文档,使其无法还原。如果取消选中IB中窗口的控制器窗口“ Restorable”属性,则永远不会还原任何文档,这不是理想的行为:需要还原未被用户关闭的已编辑保存文档;未经标题编辑的文档不应该!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。首先,我将NSDocumentController子类化,并添加到其实现文件中:

+ (void)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
{
    NSInteger restorable = [state decodeIntegerForKey:@"restorable"];
    if (!restorable) {
        completionHandler(nil, [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil]);
    }
    else {
        [super restoreWindowWithIdentifier:identifier state:state completionHandler:completionHandler];
    }
}

然后我在NSDocument子类实现文件中添加了代码

- (void) encodeRestorableStateWithCoder:(NSCoder *) coder {

    if (self.fileURL){
        [coder encodeInteger:1 forKey:@"restorable"];
    } else {
        [coder encodeInteger:0 forKey:@"restorable"];
    }
    [super encodeRestorableStateWithCoder:coder];
}

因此,对于任何没有nil fileURL的无标题文档,该标志均设置为0,并且不会恢复启动。其他文档将恢复。