当前位置: 首页 > 知识库问答 >
问题:

MacOS应用程序不能重新打开自动存储的文件

西门正平
2023-03-14

我正在构建一个基于MacOS SwiftUI文档的应用程序,其中我定义了一个新的导出类型标识符,其中包含一个新的扩展名等等。

一开始,我不关心类型标识符,所以我将其命名为com.example.Dapka.dap,但后来,我试图摆脱示例字,将标识符更改为Info.plist和文档声明文件中的com.Dapka.dap,但从那以后,每次我尝试重新打开自动保存的文档时,它都不会打开,并且我在控制台中看到以下错误:

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

-[NSDocumentController reopenDocumentForURL:withcontentsourl:display:completion handler:]在状态还原期间失败。错误如下:

错误域=NSCocoaErrorDomain Code=256“无法重新打开自动保存的文档”(空)。Dapka无法打开“Dapka文档”格式的文件。UserInfo = { NSUnderlyingError = 0x 600003 e5e 610 { Error Domain = NSCocoaErrorDomain Code = 256“未保存的Dapka文档5”无法处理,因为Dapka无法打开“Dapka文档”格式的文件。无法处理UserInfo = { NSLocalizedDescription = "未保存的Dapka文档5 ",因为Dapka无法打开“Dapka文档”格式的文件。,NSLocalizedFailureReason=Dapka无法打开“Dapka文档”格式的文件。}},NSLocalizedDescription =无法重新打开自动保存的文档“(null)”。Dapka无法打开“Dapka文档”格式的文件。,NSLocalizedFailureReason=Dapka无法打开“Dapka文档”格式的文件。}

下面是info.plist中所示的< code >导出的类型标识符:

<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>

这也是文档类型

<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 时,一切都恢复正常。我很困惑,我认为还有一些地方包含旧的示例词。

共有2个答案

邹书
2023-03-14

当您更改标识符时,您实际上创建了一个新的文档类型。用旧标识符创建的文档将无法打开,因为您更改了标识符。

如果您处于开发初期,最简单的方法是放弃旧文档。使用新标识符创建新文档。

如果需要打开使用旧标识符的文档,请使用旧标识符创建一个UTType。

extension UTType {
    static var oldDapkaDocument = UTType(importedAs: "com.example.Dapka.dap")
}

文档结构中应该有一个包含UTTypes数组的readableContentsType属性。将使用旧标识符创建的UTType添加到数组中。

static var readableContentTypes: [UTType] { [.dapkaDocument, .oldDapkaDocument] }

现在,应用程序应该能够打开新旧标识符的文档。

陈松
2023-03-14

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

1.清理构建

从菜单中选择产品,然后单击清洁构建文件夹Shift命令K

2. 删除 Xcode 构建文件夹

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

从菜单中选择 Xcode,然后点按“偏好设置命令”,然后点按“位置”。现在,在“派生数据”下,您将看到该文件夹的位置,单击该位置旁边的箭头以在Finder中打开该文件夹,然后将其删除,然后清空垃圾箱。

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

cd /Users/<YOUR_MAC_NAME>/Library/Developer/Xcode
sudo rm -rf DerivedData
 类似资料:
  • 我正在使用在我的反应应用程序中管理客户端存储,因此没有后端图形化服务器。与相关的所有内容都在客户端运行。我将所有UI状态存储在的缓存中。我还在客户端定义了所有解析器。 以下是新建客户端实例的代码: 我读过这篇文章https://www.apollographql.com/docs/angular/features/cache-updates/#automatic-存储更新关于使用apollo gr

  • 通过WebLogic Admin控制台停止/启动部署时,有时我们会收到以下错误: 然而,如果我停止并启动托管服务器,部署似乎又回来了。 我的问题是,为什么这些war文件在服务器运行时从托管服务器上随机消失?这通常发生在我们有一段时间(6个月)没有接触部署之后。还有其他部署的war文件。它不会影响应用程序的运行,直到我们尝试停止/启动它。 这就是文件系统前后的样子。 在此处重新启动托管服务器。。。

  • 问题内容: 我愿意在应用程序中添加一个按钮,单击该按钮将重新启动该应用程序。我搜索谷歌,但没有发现任何有用的,除了这一个。但是,此处遵循的过程违反了Java的WORA概念。 是否有其他以Java为中心的方法来实现此功能?是否可以只派生另一个副本然后退出? 提前致谢。我感谢您的帮助。 @deporter我已经尝试过您的解决方案,但是它不起作用:( @mKorbel我写的,采取的概念下面的代码,你曾在

  • 问题内容: 我正在寻找一个存储过程代码,该代码将打开一个文本文件,读取几千行,并将该代码添加到数据库中的表中。有一种简单的方法可以在T-SQL中实现吗? 问题答案: 如果文件已准备好按原样加载(无需数据转换或复杂映射),则可以使用“批量插入”命令: http://msdn.microsoft.com/en- us/library/ms188365.aspx

  • 我有一个activity,它调用一个扩展SurfaceView并实现Runnable的类,并将activity类的contentView()设置为surfaceview类的实例。最小化活动后,我暂停并销毁线程: 当活动恢复时,我重新创建线程: 请注意,这些是在onP()和onResume()活动方法中调用的。 当我尝试重新打开应用程序时,我看到一个黑屏。我需要抽奖(画布)方法被绘制一次。有什么技巧