【发布时间】:2023-09-29 01:23:01
【问题描述】:
Realm 10.7.3、Xcode 12.4、macOS 11.2.3
我正在试验 Realm 和 Combine+SwiftUI。当我在 Realm Studio 中更改我的数据时,它们会立即按预期反映在我的应用程序的 UI 中。但是当我添加或删除一个对象时,我的应用 UI 并没有改变。
这是我的模型定义:
//--- Model ---
class Item: Object, ObjectKeyIdentifiable {
@objc dynamic var _id = ObjectId.generate()
@objc dynamic var text = ""
}
这是我的视图模型:
//--- View Model ---
class ItemModel: ObservableObject {
static let shared = ItemModel()
var token: NotificationToken? = nil
@Published var items = [Item]()
init(){
let realm = try! Realm()
let results = realm.objects(Item.self)
items = Array(results)
token = results.observe { [weak self] _ in
print("-- updated --")
self?.objectWillChange.send()
}
}
deinit{
token?.invalidate()
}
}
最后,这是我的 SwiftUI 视图:
//--- View ---
struct ItemView: View {
@StateObject private var model = ItemModel.shared
var body: some View {
ScrollView{
VStack(spacing: 7){
ForEach(model.items, id: \._id) { item in
Text(item.text)
}
}
}
}
}
任何想法为什么我的应用程序不会显示新/删除的对象而只显示编辑?如果我重建我的应用程序,则会显示新/删除的对象。
【问题讨论】: