gpt4 book ai didi

macos - 如何实现一个复杂的基于 NSDocument 的应用程序来导入和导出非 native 文件类型?

转载 作者:行者123 更新时间:2023-12-03 16:21:12 34 4
gpt4 key购买 nike

我正在开发一个支持一组非常复杂的操作的应用程序。它类似于 Xcode 之类的东西,因为主文档由类似项目窗口的东西表示,其中有许多条目。磁盘上的文档是一个包(意味着下面有文件和文件夹结构的目录)。

它至少可以导入和导出一种文件类型 (.mfst),但它并不打算直接编辑此文件类型。也就是说,打开此文件类型会导致创建 native 文档类型,并将文件的内容导入其中。磁盘上的文件是一个 bundle (.mproj),其中包含许多文件。

从技术上讲,该文件被逐字复制到 native 文档包内的正确位置。对该文件中包含的数据的任何更改都会保存到 bundle 中的副本中,而不是导入的副本中。

该文件类型也可以导出。

问题1:这个应用程序是导入类型的查看器还是编辑器?我认为是前者。

问题 2: This question支持导入类型显示了如何通过 NSDocument 子类实现导入,但似乎子类化 NSDocumentController 是一个好方法。

原因之一是,如果用户已经导入了 .mfst 文件,我想了解这一事实。还有其他文件可能与打开的文档相关,应导入该文档而不是创建新文档。

问题 3:不幸的是,运行该项目的一些代码要求磁盘上存在某些文件。这意味着,即使为了响应打开可导入文件类型而创建了新文档,我也需要继续在磁盘上创建 bundle 并将文件复制到那里,以便可以对其进行操作。我想给用户留下这样的错觉:这是一个无标题、未保存的文档。这可能吗?

我意识到这违背了苹果公司关于不需要保存文档的“现代”概念。也许让所有操作自动保存会更好。我知道我从来没有因为无法明确保存文档而感到不舒服。我实际上不确定现在推荐的 UI 是什么(Apple 似乎在这方面改变了方向)。

欢迎推荐。

最佳答案

  1. 该行为听起来像是原始文件的查看者,因为它无法更改文件。

    对于导出的文件类型,请使用 UTExportedTypeDeclarations 键值将它们添加到应用程序的 Info.plist 文件中。来自 Font Pestle 的示例在下面。 Font PeSTLe 不会打开或编辑 CSS,但会导出格式:

     <key>UTExportedTypeDeclarations</key>
    <array>
    <dict>
    <key>UTTypeConformsTo</key>
    <array>
    <string>public.source-code</string>
    <string>public.utf8-plain-text</string>
    </array>
    <key>UTTypeDescription</key>
    <string>Cascading Style Sheet</string>
    <key>UTTypeIdentifier</key>
    <string>eu.miln.font-pestle.css</string>
    <key>UTTypeReferenceURL</key>
    <string>http://www.w3.org/Style/CSS/</string>
    <key>UTTypeTagSpecification</key>
    <dict>
    <key>public.filename-extension</key>
    <array>
    <string>css</string>
    </array>
    </dict>
    </dict>
  2. 子类化 NSDocumentController 是检查正在打开的文件的先前导入副本的合理位置。

    如果您发现自己在 NSDocumentController 子类中编写了数百行代码,请重新考虑您的设计。所需的子类化应该最少。

  3. 使用 NSDocumentNSFileWrapper 的支持.

    NSFileWrapper 旨在帮助简化管理基于包的文档。 NSDocumentNSFileWrapper 将在用户主动保存或需要为文档选择目标位置之前处理保存无标题文档的临时副本。

我强烈建议阅读 Apple 的 About the Cocoa Document Architecture并尽可能严格遵循其指导方针。这将节省您的时间,并有望随着 Apple 发展其底层框架而使您的应用程序维护变得更加容易。

关于macos - 如何实现一个复杂的基于 NSDocument 的应用程序来导入和导出非 native 文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37583530/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com