NSDocument 应用程序和文件扩展名

Posted

技术标签:

【中文标题】NSDocument 应用程序和文件扩展名【英文标题】:NSDocument app and file extension 【发布时间】:2012-08-23 11:23:03 【问题描述】:

我创建了一个基于文档的应用程序,它需要打开具有特定扩展名的 xml 文本文件。当我使用 NSDocument 模板在 Xcode 中创建项目时,我指定了我想要的扩展名,一切正常。

按照 Apple 关于如何构建基于文档的应用程序的指南,我编辑了 Info.plist 文件以添加之前缺少的 UTI 的详细信息。突然,我的应用程序停止打开具有我想要的扩展名的文件,实际上停止打开任何文件。此外,当我尝试保存文件时,保存对话框不再建议任何扩展名。

当我保存文件并从终端运行命令 mdls 时,我得到

kMDItemContentTypeTree         = (
    "public.data",
    "public.item"
)

我在 Info.plist 中为 UTI 设置了 public.xml 而不是 public.xml。 似乎我的应用程序停止识别存储在 Info.plist 中的信息。我必须在 Xcode 中连接什么才能使其正常工作吗?

这是我的 Info.plist 文件的相关部分:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>xmds</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>AppIcon</string>
        <key>CFBundleTypeName</key>
        <string>XMDS Script</string>
        <key>CFBundleTypeOSTypes</key>
        <array>
            <string>xmds</string>
        </array>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.dedalus.degs</string>
        </array>
        <key>NSDocumentClass</key>
        <string>Document</string>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.xml</string>
        </array>
        <key>UTTypeDescription</key>
        <string>XMDS Script</string>
        <key>UTTypeIconFile</key>
        <string>AppIcon</string>
        <key>UTTypeIdentifier</key>
        <string>com.dedalus.degs</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>com.apple.ostype</key>
            <array>
                <string>xmds</string>
            </array>
            <key>public.filename-extension</key>
            <array>
                <string>xmds</string>
            </array>
        </dict>
    </dict>
</array>

【问题讨论】:

我尝试使用 Xcode 模板创建一个基于文档的新项目。一开始,应用程序会打开并将文档保存在我在模板中指定的扩展名中。一旦我在项目的目标信息设置中输入文档类型的标识符,一切都会崩溃。 【参考方案1】:

我使用项目的目标信息设置来设置文档类型和 UTI,而不是 Xcode 4.2 和 4.4 中的 Info.plist 文件。这从 Info.plist 文件中提取并在您更改后对其进行修改。尝试使用它。

文档类型定义将处理扩展和扩展的类。导出的 UTI 代表您的应用对其具有权威性的扩展。请参阅此 *** 问题: What are “Imported UTIs” in Xcode 4?

我导出的 UTI 符合 public.data(“任何类型的简单字节流的基本类型,包括文件和内存中的数据”)。如果您使用标识符,请确保文档类型和导出的 UTI 中的标识符相同。

【讨论】:

我就是这么设置的。我只是认为粘贴 I​​nfo.plist 更容易阅读。

以上是关于NSDocument 应用程序和文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

NSDocument 保存音频和视频文件

在没有任何窗口的情况下保持和 NSDocument 打开

基于 NSDocument 的应用程序:在 NSSavePanel 中选择默认文件类型

如何同时保存 NSDocument?

NSDocument 和键盘(如 keyDown)

如何在 Objective-C 的 NSDocument 目录中保存和获取多个 pdf 文件?