在一个简单的基于NSDocument子类的rtf编辑器中,当应用启动时,它将创建一个无标题的文件。这是一种理想的行为。但是,如果我使用打开,未编辑和未保存的文档(空!)退出应用程序,则该应用程序将在下次启动时恢复该文档。
如何设置此文档,使其无法还原。如果取消选中IB中窗口的控制器窗口“ Restorable”属性,则永远不会还原任何文档,这不是理想的行为:需要还原未被用户关闭的已编辑保存文档;未经标题编辑的文档不应该!
答案 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,并且不会恢复启动。其他文档将恢复。