StateRealmObject变化时如何刷新视图

问题描述 投票:0回答:1

我的视图上显示了一个@StateRealmObject。

当整个对象发生更改时,视图会更新(如“更改国家/地区”按钮上所做的那样),但是当我仅更改该对象的属性时,不会渲染视图(“更改名称”按钮)!!!

我希望文本能够在国家/地区对象已修改时呈现。

实现这一目标的最佳方法是什么?

(我可以使用 id 和新的状态变量手动强制更新文本,但这是一个糟糕的解决方案,因为它在大视图中会变得很麻烦,应该有一个更优雅和最先进的解决方案)。

感谢您的建议,这是完整的功能代码:

import SwiftUI
import RealmSwift

let realm = try! Realm()

class Country2: Object, ObjectKeyIdentifiable {
    @Persisted(primaryKey: true) var code = ""
    @Persisted var name = ""

    convenience init(_ code: String, _ name: String) {
        self.init()
        self.code = code
        self.name = name
    }
}

struct ContentView2: View {

@StateRealmObject var country: Country2

var body: some View {
    ZStack {
        VStack {
            
            Button("Change country", action: {
                let randomIndex = Int.random(in: 0..<realm.objects(Country2.self).count)
                country = realm.objects(Country2.self)[randomIndex]. // Render OK
            })
            
            Text(country.name).padding()
            
            Button("Update name", action: {
                try! realm.write() {
                    country.thaw()!.name = country.name + "_ADD"   // No render
                }
            })
        }
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
    .background(Color.lightGrey)
    .onAppear() {
        try! realm.write() {
            realm.deleteAll()
            realm.add(Country2("AO","Angola"))
            realm.add(Country2("AR","Argentina"))
            realm.add(Country2("AT","Austria"))
            realm.add(Country2("AU","Australia"))
        }
    }
}
}
swiftui realm
1个回答
0
投票

我想你对使用 SwiftUI 的 Realm 并不熟悉。您只需复制 Realm 的 UIKit 体验,然后在 Realm 上查找 SwiftUI 的内容即可。

首先阅读本文并重构您的代码。

https://www.mongodb.com/docs/realm/sdk/swift/swiftui-tutorial/

或者简短版本

https://zhaoxin.pro/16285779845842.html

简单来说,你应该使用

@ObservedResults(Country2.self) var countries

而不是

@StateRealmObject var country: Country2
© www.soinside.com 2019 - 2024. All rights reserved.