首页 > 解决方案 > 基于 SwiftUI Document 的多平台应用,在 iOS 上保存内容

问题描述

我正在使用 Xcode 12.3 中的新多平台文档应用程序模板。

默认模板使用 TextEditor() 来编辑文本。在 macOS 上,可以通过菜单中的手动保存命令或键盘快捷键来保存文本,在 iOS 上,单击工具栏中的“<”符号时会保存文本(在返回文件浏览器之前)。

现在,在我的应用程序中,我显然不使用 TextEditor() 但我有自己的编辑器逻辑。在 macOS 上,我仍然可以手动保存项目,但在 iOS 上,单击“<”时,项目将不再自动保存,即不会调用 FileDocument 中的 fileWrapper 函数。

我认为这是因为没有人通知系统 FileDocument 已更改?但是如何手动做到这一点?

标签: swiftswiftui

解决方案


要回答我自己的问题,您需要做的就是在文档中有一个变量并更改它,例如

struct MyDocument: FileDocument {

    @ObservedObject var myProject = MyProject()
    var updated              : Bool = false

因此,每次更改 myProject() 时,我都会切换更新的变量。我认为向 myProject 发送 objectWillChange() 通知会将项目标记为已编辑,但事实并非如此。


推荐阅读