重新加载数据但 ObservableObject 不工作
Posted
技术标签:
【中文标题】重新加载数据但 ObservableObject 不工作【英文标题】:Reload data but the ObservableObject is not working 【发布时间】: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)
GeometryReadermainView in
ScrollView(.vertical, showsIndicators: false)
VStack
ForEach(favorites.posts)post in
NavigationLink(destination: FavoriteDetail(post: post))
GeometryReaderitem 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
【参考方案1】:
当我在ScrollView
中使用ForEach
时遇到了同样的问题
查看this讨论,它可能会帮助您找到解决此问题的技巧
【讨论】:
以上是关于重新加载数据但 ObservableObject 不工作的主要内容,如果未能解决你的问题,请参考以下文章
切换选项卡后 UI 会随 ObservableObject 发生变化
我们如何在 SwiftUI 中读取和写入相同的 ObservableObject?