gpt4 book ai didi

swift - 如何正确地将 RealmDB 结果对象映射到 SwiftUI 列表?

转载 作者:行者123 更新时间:2023-11-30 10:33:37 24 4
gpt4 key购买 nike

我尝试在 SwiftUI 列表中显示 Realmdb 查询的结果,但在删除数据库对象时遇到问题。

我正在尝试使用这样的东西:

final class DBData: ObservableObject{

let didChange = PassthroughSubject<DBData, Never>()

private var notificationTokens: [NotificationToken] = []
var events = try! Realm().objects(ADMEvent.self)
@Published var events: [ADMEvent] = []
init() {
// Observe changes in the underlying model
self.notificationTokens.append(posts.observe { _ in
self.events = Array(self.posts)
self.didChange.send(self)
})
}
}

如果我在列表中显示项目,但当我使用realm.deleteAll()时,应用程序崩溃,因为它看起来像Swift UI的列表实现正在尝试比较列表,访问现在无效的领域数据库对象。

关于堆栈溢出有大约 3 或 4 个类似的问题,但它们都以某种方式过时了,或者可以工作,但在删除时仍然存在此问题。

谢谢!

最佳答案

领域对象是实时的并且会自动更新,这就是当您尝试保留已删除的对象时它们会崩溃的原因。 Realm.Object 不是给您的发布主题,而是将其映射到一个仅包含您需要使用的字段的结构,并使用该数组来驱动 SwiftUI。

struct Event: Identifiable {
var id: String
var name: String
var date: Date
}

final class DBData: ObservableObject {
private var notificationTokens: [NotificationToken] = []
var events = try! Realm().objects(ADMEvent.self)
@Published var publishedEvents: [ADMEvent] = []
init() {
// Observe changes in the underlying model
self.notificationTokens.append(posts.observe { _ in
self.publishedEvents = events.map { Event(id: $0.id, name: $0.name, date: $0.date)}
})
}
}

关于swift - 如何正确地将 RealmDB 结果对象映射到 SwiftUI 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com