如何在自定义文件包文档类型中嵌入SwiftData模型容器

问题描述 投票:0回答:1

我对此做了很多研究,但无法针对这个问题提出可行的解决方案。我在 Swift 和 SwiftUI/SwiftData/AppKit/UIKit 方面的知识和经验有限,所以我可能没有正确地看到问题并提出解决方案。

背景:

我正在尝试在 macOS/iOS 上制作一个通用应用程序来组织媒体(图像/视频/pdf);想象一下它的功能就像苹果的照片应用程序一样。因此,对于我的应用程序文档类型,我将拥有自定义文件包,并且在包文件夹中,将有一个 SwiftData 模型容器文件和文件夹来保存用户媒体。

采取的方法:

  1. 使用SwiftData模型的DocumentGroup然后直接写入文件包

在我的应用程序场景中,我通过 DocumentGroup 创建文档(编辑:.customDocument,migrationPlan:CustomMigrationPlan.self)。这将使用我的 SwiftData 模型创建一个包含模型容器的文档。当我需要将媒体文件添加到文档中时,我获取文档的 URL,然后使用 FileManager 将文件写入文档中所需的文件夹中。结果是媒体文件保存在文件包中,但随后 SwiftData 容器被损坏(所有模型数据重置为空。)

我现在正在努力:

  1. 带有自定义文件包的DocumentGroup,然后尝试嵌入SwiftData容器

在我当前的方法中,我将通过 DocumentGroup(newDocument: CustomFileDocument()) 创建一个文档。我有自定义 FileDocument 和 FileWrapper。但问题是我不知道如何将 SwiftData 容器嵌入到我的 FileDocument 中。我的 FilerWrapper 初始化时是否可以创建 SwiftData 模型容器?我不知道该怎么做。

任何人都可以建议我应该如何实现这一目标吗?或者如果我错误地看待这个问题?我是否需要将 AppKit/UIKit 与 Core Data 一起使用,因为目前 SwiftUI/SwiftData 无法实现?

非常感谢您的阅读,非常感谢您的任何意见。

ios swift macos swiftui swiftdata
1个回答
0
投票

您可以使用

ModelDocument
来实现这一点。还有一个示例使用 SwiftData 构建基于文档的应用程序

© www.soinside.com 2019 - 2024. All rights reserved.