首页 > 解决方案 > 如何允许在 SwiftUI 中创建新对象的按钮在重新加载时不创建对象?

问题描述

所以我在 Swift UI 中为“New Note”制作了一个按钮,类似于 Apple Notes 应用程序。

现在我的“新按钮”是一个“导航链接”,如下所示:

NavigationLink(
     destination: EditorView(makeNewNote())
) {
    Text("New")
}

不幸的是,这会触发我的应用程序在每次加载视图时创建一个新注释。:(

:/一秒记

我一直在寻找一种方法来启动按钮按下的 segue,但我还没有找到成功。

当我尝试一个模态时——我发现自己遇到了同样的问题

Button("New") {
    self.isNew = true
 }.sheet(isPresented: $isNew, content: {
    EditorView(makeNewNote())
 })

我想知道解决这个问题的最佳方法是什么。

没有成功:(

编辑:

我参考了这个和文档,但我还没有找到一种通过按钮按下进行切换的方法,这是理想的。(函数dosent在闭包中被触发:)

https://www.hackingwithswift.com/quick-start/swiftui/how-to-push-a-new-view-onto-a-

另外......如果你好奇它是做什么makeNewButton()的——它基本上将一个新的 Core Data 对象插入到我的应用程序的托管上下文中。

标签: swiftui

解决方案


我不完全确定,但在我看来,您的问题在于您的模型。因为每次您的 View 加载它都会调用该makeNewButton()函数,对吗?

也许您可以通过显示“新注释”视图并使用额外的“保存”按钮来解决问题,该按钮仅在触发后才对模型进行更改。

或者,您可以使用context.rollback()丢弃更改。另外,看看这个项目。它是 Beta 4,但工作原理相同,imo 是如何将 CoreData 与 SwiftUI 一起使用的一个很好的例子。:)


推荐阅读