cocoa - 强制 NSDocument 创建后保存

标签 cocoa nsdocument nsdocumentcontroller

在其文档中,我的应用程序使用了许多与文档路径相关的资源。因此,在添加 Assets 之前必须保存文档。如何强制调用 [NSDocument saveDocumentAs] ?

我设法完成了其中的一部分:通过创建自己的文档 Controller ,并在 openUntitledDocumentAndDisplay: 内部强制进行如下调用:

- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError **)outError
{
    NSDocument * res = [super openUntitledDocumentAndDisplay:displayDocument error:outError];
    [res saveDocumentAs:self];


    return res;
}

这会强制显示保存对话框,但不幸的是我无法检查用户是否按下了取消:saveDocumentAs 调用是异步的并立即继续!

有办法解决这个问题吗?

最佳答案

我也遇到了类似的问题。通过使用: saveDocumentWithDelegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo 您可以推迟(或不推迟)处理,直到文档保存对话框完成。这意味着您可以查明用户是否取消。您将处理分成两部分,进行所需的任何准备,然后将其余部分(这取决于成功保存)放入另一种方法中。如果你使用类似的东西:

[self saveDocumentWithDelegate:self didSaveSelector:@selector(actuallyDoIt: didSave: contextInfo:) contextInfo:nil];

文档将被保存,但重要的是,如果以前没有保存过,则会出现“保存”对话框,以便用户可以输入文件名。一旦他/她完成了该操作或取消了,您的方法actualDoIt:(或其他)就会被调用。 didSave: 参数告诉您保存是否实际发生(本质上,用户是否取消),因此您可以继续或提供警报,礼貌地向用户解释在保存之前不会发生任何事情。

关于cocoa - 强制 NSDocument 创建后保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080031/

相关文章:

cocoa NSDocument : getting autosave to work

objective-c - 改变 View 的背景颜色似乎很难?

objective-c - 透明 WebView(drawsBackground = false)

objective-c - 如何判断触控板点击的NSEvent,而不是点击点击

cocoa - 如何在 swift 应用程序中使用 sparkle updater?

objective-c - 清理App全局资源的最佳位置?

objective-c - 基于文档的应用程序的 'New Document' 停靠菜单项将无法打开新文档

objective-c - 重写 NSDocument 的 fileWrapperOfType 会导致 "Document could not be saved."

objective-c - 如何同时保存 NSDocument?

objective-c - 在基于 Cocoa Document 的应用程序启动中禁用打开面板