0

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

如何设置此文档以使其无法恢复。如果我在 IB 中取消选中窗口的控制器窗口“可恢复”属性,则不会恢复任何文档,这不是理想的行为:需要恢复用户未关闭的已编辑保存的文档;untitled-unedited 文件不应该!

4

1 回答 1

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,并且不会恢复启动。其他文件被恢复。

于 2018-11-28T19:56:20.177 回答