假设我有两个流程:
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/