【问题标题】:Reload data but the ObservableObject is not working重新加载数据但 ObservableObject 不工作
【发布时间】:2020-12-21 19:14:07
【问题描述】:

使用 SwiftUI,我在数据库中创建 Favorite 对象时尝试更新数据。创建成功,调用reload函数时,可以得到正确的信息。

但是,当我更改视图时,它不会在视图中重新加载。

我的数据代码:

// Favorite
struct  Favorite: Decodable, Identifiable {
    var id:Int?
    public var id: Int?
    public var name: String?
    public var type: String?
    var addres: String?
}


class Favorite: ObservableObject {
    var userID = userViews().id
    @Published var favorites = [Favorite]()
    
    init(){
        load()
    }
    
    func load() {
        let url = URL(string: "https://***********/getFavoriteApi/")

        URLSession.shared.dataTask(with: url) {(data, response, error) in
            do {
                if let d = data {
                    let decodedLists = try JSONDecoder().decode([Favorite].self, from: d)
                    DispatchQueue.main.async {
                        self.favorites= decodedLists
                        print(self.favorites)
                    }
                }else {
                    print("No Data")
                }
            } catch {
                print ("Error")
            }
            
        }.resume()
         
    }
}

如果我打印(self.favorites)它可以在创建收藏夹后看到新的可选,但视图不会重新加载它。

我的查看代码:

struct FavoriteView: View {
    @ObservedObject var favorites = Favorite()
    
    var name = UserDefaults.standard.value(forKey: "name")as? String ?? "null"
    var userID = userViews().id
    
    
    var body: some View {
        VStack{
            Text("My Favorite")
                .font(.title)
            GeometryReader{mainView in
                ScrollView(.vertical, showsIndicators: false) {
                    
                    VStack{
                        
                        ForEach(favorites.posts){post in
                            
                            NavigationLink(destination: FavoriteDetail(post: post)) {
                                
                                GeometryReader{item in
                                    
                                    rentView1(post: post)
                                        // scaling effect from bottom....
                                        .scaleEffect(scaleValue(mainFrame: mainView.frame(in: .global).minY, minY: item.frame(in: .global).minY),anchor: .bottom)
                                        // adding opacity effect...
                                        .opacity(Double(scaleValue(mainFrame: mainView.frame(in: .global).minY, minY: item.frame(in: .global).minY)))
                                }
                                .frame(height: 100)
                                
                            }                    
                        }
                    }
                    .padding(.horizontal)
                    .padding(.top,25)
                    
                }
                .zIndex(1)
                
            }
        }
    }
}

恐怕我做错了什么,或者我不明白 ObservedObjects 如何与 JSONDecoder 一起工作。

欢迎任何帮助或解释!谢谢。

【问题讨论】:

  • Fetcher 是什么?
  • 对不起,我错了,这是我的最爱,而不是 Fetcher

标签: ios swiftui


【解决方案1】:

当我在ScrollView 中使用ForEach 时遇到了同样的问题

查看this讨论,它可能会帮助您找到解决此问题的技巧

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2019-12-16
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多