【问题标题】:Overriding NSDocument's fileWrapperOfType causes "Document could not be saved."覆盖 NSDocument 的 fileWrapperOfType 会导致“无法保存文档”。
【发布时间】:2026-02-09 18:45:01
【问题描述】:

我必须遗漏一些简单的东西,但 Google 没有提供帮助。

我的文件可以正常保存和加载。 (我已经覆盖 dataOfType 以获取一些东西。)然后我覆盖 fileWrapperOfType (准备创建一个包),我得到一个“文档'无标题'无法保存为'测试'。 "当我尝试保存时。即使我将我的方法清空为我能想到的绝对最基本的形式......

- (NSFileWrapper*)fileWrapperOfType:(NSString*)typeName error:(NSError**)outError
{
  NSFileWrapper* worldWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
  return [worldWrapper autorelease];
}

...我仍然无法保存。我错过了什么?

【问题讨论】:

  • 一般做法是检查返回值和 - 如果可用 - NSError 输出参数总是有用的。

标签: objective-c cocoa nsdocument nsfilewrapper


【解决方案1】:

来自文档(重点是我的):

字典必须包含条目,其值为要成为子项的文件包装器,其键是文件名。

您使用nil,所以我猜worldWrappernil,返回nil 被解释为无法保存您的文件。

【讨论】:

  • 关闭;我已经检查以确保 worldWrapper 不是零(并且确实如此)。但是这个答案确实促使我尝试使用空字典而不是零字典,并且有效。不过,这似乎仍然很不寻常。难道大多数方法都不允许使用 nil 字典代替空字典吗?
  • @andyvn22:有些方法可以,有些方法不行。您需要传递所需类型(字典、字符串、数组等)的空值而不是 nil 变得越来越普遍,因此即使您不确定是否有必要,这样做通常也是一个好主意。