Cocoa 基于文档的应用程序:对于仅查看器的文件类型,将“保存”更改为“另存为”

Posted

技术标签:

【中文标题】Cocoa 基于文档的应用程序:对于仅查看器的文件类型,将“保存”更改为“另存为”【英文标题】:Cocoa Document-Based App: Change "Save" to "Save As" for Viewer-Only Filetypes 【发布时间】:2010-07-21 22:25:01 【问题描述】:

我有一个基于 Cocoa 文档的应用程序(目前至少)用作基本的文本编辑器。它保存 .txt、.rtf 和 .rtfd,并加载它们以及 .doc 和 .docx。如果我打开一个 .doc 或 .docx 文件并对其进行编辑,然后尝试关闭它,它会提醒我保存,但保存选项不会做任何事情,因为该应用程序只是这些类型文件的查看器。对于只能查看的类型(如 .doc 和 .docx),如何将该功能设置为“另存为”?

【问题讨论】:

【参考方案1】:

将您自定义的NSDocument 中的saveDocumentWithDelegate::: 覆盖为以下内容:

- (void)saveDocumentWithDelegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo

  if (delegate != nil)
  
    // use delegate or contextInfo to decide what operation you need to use...

    [self runModalSavePanelForSaveOperation:NSSaveAsOperation
                                   delegate:delegate 
                            didSaveSelector:didSaveSelector 
                                contextInfo:contextInfo];
  
  else
  
    [super saveDocumentWithDelegate:delegate 
                    didSaveSelector:didSaveSelector
                        contextInfo:contextInfo];
  

默认情况下,delegate 在窗口关闭时是 NSWindow,如果您退出应用程序并且控制器会枚举窗口以查看更改,则 NSDocumentController

【讨论】:

谢谢,我花了一些时间来实现它(忙于处理其他事情),但代码效果很好!【参考方案2】:

不完全清楚你是否真的想在编辑后写入更新的文件,或者阻止编辑从而防止警告文档已被修改。

要不看到保存警告,首先您需要将文档类型角色设置为“查看者”,如果它恰好是“编辑者”。这是在目标设置中。

那么你需要 1. 确保文件的内容没有改变,和/或 2. 告诉文档不要费心将自己显示为脏

但是,如果您想允许编辑和保存文档,则必须以正确的格式写回这些文件。这很重要,除了 TextEdit 的源代码可用并包含在 Xcode 中。但粗略一看,NSDocument 似乎已经支持 .doc 和 .docx。

您将在 /Xcode/Examples 中找到 TextEdit 的项目文件夹。

【讨论】:

我想显示警告,但将“保存”更改为“另存为”。这样,如果有人打开只读文件并对其进行编辑,“另存为”将允许他们以支持的写入格式保存它。目前,所有操作表允许他们做的是“保存”,因为它是只读的,所以只会将它们返回到文档中而没有任何反馈。不过,我会看看 TextEdit 源代码,以防它包含 .doc 和 .doxc 保存代码。

以上是关于Cocoa 基于文档的应用程序:对于仅查看器的文件类型,将“保存”更改为“另存为”的主要内容,如果未能解决你的问题,请参考以下文章

在基于文档的 Cocoa 应用程序中避免耦合?

在 xcode 8.3 中创建一个仅限 XIB 的 Cocoa 项目

在基于 Cocoa 文档的应用程序启动中禁用打开面板

基于 Cocoa 文档的应用程序中的 MVC

Autodesk Forge 查看器仅渲染 PDF 文件的单页

Cocoa Interface Builder 对象初始化