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 基于文档的应用程序:对于仅查看器的文件类型,将“保存”更改为“另存为”的主要内容,如果未能解决你的问题,请参考以下文章
在 xcode 8.3 中创建一个仅限 XIB 的 Cocoa 项目