【问题标题】:After changing Document Parameters, NSCocoaErrorDomain 256 opening *new* docs更改文档参数后,NSCocoaErrorDomain 256 打开 *new* docs
【发布时间】:2017-06-24 03:28:51
【问题描述】:

对于基于 NSDocument 的应用程序的下一个版本,我正在修改文档参数,即 Info.plist > CFBundleDocumentTypes 和 UTExportedTypeDeclarations 中的值。具体来说,我正在从平面 NSPersistentDocument 更改为文档包(在 BSManagedDocument 的帮助下)。

修改后的应用程序可以创建新文档,但它们在 Finder 中出现一个通用图标,当我关闭这样一个新文档并尝试重新打开它时,-[NSDocumentController openDocumentWithContentsOfURL:display:completionHandler:]fails,在 NSCocoaErrorDomain 中创建错误代码 256 ,描述“newDoc.myExtension”无法处理,因为MyApp无法打开该类型的文件,失败原因MyApp无法打开该类型的文件

我了解有几个重要的参数 CFBundleDocumentTypes 和 UTExportedTypeDeclarations,这些参数必须全部正确,否则会出现此错误。在这种情况下,它们是正确的。我通过将我构建的产品中的 Info.plist 与另一个但类似的应用程序的 Info.plist 进行比较来确认这一点。

我也尝试在 main() 中使用 inUpdate = true 调用 LSRegisterURL(),但这没有帮助。

可能出了什么问题?我在 macOS 10.12.6 中运行,使用 macOS 10.13 SDK 和 Xcode 9 构建。

【问题讨论】:

    标签: macos cocoa info.plist nsdocument


    【解决方案1】:

    显然问题在于更新启动服务数据库。我将带有修改后的Info.plist 的新应用程序复制到/Applications,替换了旧版本,然后启动了这个副本一次。经过这两个步骤后,当我重新打开 Finder 窗口时,文档图标现在是正确的,并且在重新启动我的新应用程序时,它现在可以重新打开自己的新文档而不会出错。

    更新:今天(macOS 10.13 Beta 8)我遇到了同样的问题,但是将更正的应用程序安装到 /Applications 中不起作用。但是,这一次,通过在终端中运行以下命令来重建启动服务数据库,然后重新启动我的应用程序,确实有效:

    /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain u -domain s -domain l -v

    上述情况的一个副作用是,在重新启动之前,某些应用程序在 Dock 和 cmd-tab 应用程序切换器中将具有通用图标。

    我认为启动服务更喜欢/Applications 中的应用程序而不是 Xcode 的 DerivedData 文件夹中的应用程序,即使后者是当前唯一运行的应用程序,或者运行 Xcode 的 DerivedData 中的应用程序根本不注册,或两者兼而有之。

    从文档看来,调用LSRegisterURL() 应该有同样的效果,但显然不是。

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多