首页 > 解决方案 > MacOS 应用程序无法重新打开自动保存的文件

问题描述

我正在构建一个 MacOS SwiftUI 基于文档的应用程序,我在其中定义了一个带有新扩展名的新导出类型标识符以及所有这些。

一开始我并不关心 Type Identifier 所以我把它命名com.example.Dapka.dap为尝试重新打开自动保存的文档,它不会打开,我在控制台中看到以下错误:examplecom.Dapka.dap

此应用程序无法重新打开自动保存的 com.example.dapka.dap 文件。

-[NSDocumentController rebootDocumentForURL:withContentsOfURL:display:completionHandler:] 在状态恢复期间失败。这是错误:

Error Domain=NSCocoaErrorDomain Code=256 “无法重新打开自动保存的文档“(null)”。Dapka 无法打开“Dapka 文档”格式的文件。” UserInfo={NSUnderlyingError=0x600003e5e610 {Error Domain=NSCocoaErrorDomain Code=256 ““未保存的 Dapka 文档 5”无法处理,因为 Dapka 无法打开“Dapka 文档”格式的文件。” UserInfo={NSLocalizedDescription=“未保存的 Dapka 文档 5”无法处理,因为 Dapka 无法打开“Dapka 文档”格式的文件。, NSLocalizedFailureReason=Dapka 无法打开“Dapka 文档”格式的文件。}}, NSLocalizedDescription=自动保存的无法重新打开文档“(null)”。Dapka 无法打开“Dapka Document”格式的文件。, NSLocalizedFailureReason=Dapka 无法打开“Dapka Document”格式的文件。}

如info.plistExported Type Identifier所示:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
            <string>public.content</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Dapka Document</string>
        <key>UTTypeIdentifier</key>
        <string>com.Dapka.dap</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>dap</string>
            </array>
        </dict>
    </dict>
</array>

Document Types也是:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconSystemGenerated</key>
        <integer>1</integer>
        <key>CFBundleTypeName</key>
        <string>Dapka Document</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.Dapka.dap</string>
        </array>
        <key>NSDocumentClass</key>
        <string></string>
        <key>NSUbiquitousDocumentUserActivityType</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER).dap</string>
    </dict>
</array>

这是文档声明文件中的文档变量:

extension UTType {
    static var dapkaDocument = UTType(exportedAs: "com.Dapka.dap")
}

请注意,当我将标识符返回到 时com.example.dapka.dap,一切都恢复正常。我很困惑,我想还有一些地方包含旧example词。

标签: swiftmacosswiftuidocument-based

解决方案


我以前也遇到过同样的问题。导致问题的原因是 Xcode 兑现数据,因此您可能需要清理该缓存。

1.清理构建

从菜单中选择Product ,然后单击Clean Build Folder Shift+Command+K

2.删除Xcode构建文件夹

如果上一步没有解决它,这个应该可以解决问题。Derived Data 是 Xcode 存储临时构建数据和索引的文件夹,因此您可以毫无问题地删除它。

从菜单中选择Xcode ,然后单击Preferences Command+,,然后单击Locations。现在,在派生数据下,您将看到该文件夹​​的位置,单击该位置旁边的箭头以在 Finder 中打开该文件夹,然后将其删除,然后清空垃圾箱。

或者,您可以使用终端删除文件夹:

cd /Users/<YOUR_MAC_NAME>/Library/Developer/Xcode
sudo rm -rf DerivedData

推荐阅读