【发布时间】:2020-04-15 19:02:18
【问题描述】:
我遇到了一个问题,即视图没有使用 @Observable 对象自动更新。
struct Person: Identifiable {
var id: Int
var name: String
init(id: Int, name: String){
self.id = id
self.name = name
}
}
class People: ObservableObject {
@Published var people: [Person]
@Published var kitchens: [Kitchen]
init(){
self.people = [
Person(id: 1, name:"Javier"),
Person(id: 2, name:"Juan"),
Person(id: 3, name:"Pedro")]
}
}
struct ContentView: View {
@ObservedObject var mypeople: People
var body: some View {
VStack{
ForEach(mypeople.people){ person in
Text("\(person.name)")
}
Button(action: {
self.mypeople.people.append(Person(id: 7, name: "New person"))
}) {
Text("Add/Change name")
}
}.onAppear {
self.mypeople.people.append(Person(id: 7, name: "New person"))
}
}
}
所以,我想做的是我必须在 onAppear 中添加一个新人,而不是在点击按钮时添加一个新人。简而言之,可以说 people 数组已经有三个人,我必须在登陆该视图时添加第四个。
奇怪的是,如果此视图是根视图,则会添加该人,但是,当使用导航链接推送此视图时,它不起作用。在第二种情况下,会立即添加和删除一个新人员,同时保持人员数组计数为 3。
但是,只需轻按按钮,即可轻松添加新人。我被困在这里几个小时。任何帮助将不胜感激!提前致谢!
编辑
我进行了更多调试以找出问题所在。所以,新人会在以下场景中自动添加到 onAppear 中:
1) 如果 ContentView 是应用程序的根视图。 2) 如果 ContentView 是从父视图层次结构中的第一个视图推送的。意思是,如果有 ContentView 的子视图。子视图中的导航链接会产生此问题,但是,直接来自 ContentView 的导航链接会成功添加人员。
为了创建一个导航链接,我使用了:
NavigationLink(destination: ContentView()) {
Text("View All")
}
【问题讨论】:
-
在 NavigationLink 的情况下,您会展示如何管理它的代码吗?
-
实际上问题出在导航链接本身。我正在添加更多描述。
-
@Asperi : 我已经编辑了帖子
-
我无法重现您的问题。请更新您的代码以包含查看实际问题所需的所有内容。例如,您从未向我们展示 People() 对象的创建位置。您遇到的问题似乎是 People 对象被“覆盖”,但由于我们没有看到您的代码的那部分,我无法确定。
标签: ios swift swiftui swiftui-navigationlink