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

时间:2010-07-21 22:25:02

标签: objective-c cocoa document-architecture

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

2 个答案:

答案 0 :(得分:1)

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

- (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在窗口关闭时为NSWindowNSDocumentController

答案 1 :(得分:0)

如果您确实想在编辑后编写更新的文件,或者阻止编辑,从而防止警告文档已被修改,则不完全清楚。

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

然后你需要 1.确保文件内容不变,和/或 2.告诉文件不要打扰自己显示为脏

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

您可以在/ Xcode / Examples中找到TextEdit的Project文件夹。