gpt4 book ai didi

ios - Realm Swift 如何将观察者添加到对象类型(无)

转载 作者:搜寻专家 更新时间:2023-11-01 06:55:16 24 4
gpt4 key购买 nike

假设我有两个流程:

1) 我在数据库中有数据,然后我使用从数据库中获取带有参数的实体并设置和观察者。之后我从服务器加载数据并且观察者的 block 成功触发。没关系。

2) 我的数据库中没有数据。然后我尝试做同样的事情,它看起来像:

    myObject = MyRealmService()
.fetchAll(MyRealmObject.self,
filter: "userID == \(someID)")?
.first
realmToken = myObject?.observe { [weak self] change in
guard let _self = self else { return }

switch change {
case .deleted:
_self.popCurrentViewController()
case .error(let error):
_self.show(error: error)
case .change:
_self.updateUI()
}
}

loadDataFromServer() { object in
object.saveToRealm()
}

那么 myObject 为 nil,所以通知 block 不设置。

这样处理通知的方法是什么?我的意思是,也许我们可以通过某种方式将 block 设置为过滤器类型 (MyRealmObject.self, filter: "userID ==\(someID)"),因此如果在 Realm 中写入适合它的对象, 然后 observe 方 block 会开火吗?

最佳答案

您可以观察 Realm Results,而不是观察仍未存储在 Realm 数据库中的单个对象。

   let realm = try! Realm()

var results = realm.objects(MyRealmObject.self).filter: "userID == \(someID)")

var notificationToken = results.observe { change in
switch change {
case .update:
DispatchQueue.main.async {
block()
}
default: ()
}
}

您可以观察结果对象而不是单个对象,并根据变化执行一些操作。

关于ios - Realm Swift 如何将观察者添加到对象类型(无),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53890573/

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