Swift 3.1,Xcode 8.3.3
我有一个在我的应用中的View Controller中设置的Realm通知,并且在我的应用启动后,它会连续触发4次。
let realm = try! Realm()
notificationToken = realm.addNotificationBlock { notification, realm in
print("notif: \(notification)") <-- Logs 4 times in a split second
self.refreshData()
}
由于refreshData()
方法是刷新我的UI(包含绘制的图形)的方法,因此每次刷新时都会看到抖动/闪烁。
有没有办法将这些通知聚合到一个通知中,所以我只获得一次UI刷新?
答案 0 :(得分:2)
如果在Realm实例上设置通知块,则每次写入事务都会收到通知。要将单个通知“聚合”为单个通知,您需要将单独的写入事务合并为一个。
例如,这段代码会触发两个通知:
try! realm.write {
realm.add(Person(value: ["name":"John"]))
realm.add(Person(value: ["name":"Chris"]))
}
try! realm.write {
realm.add(Person(value: ["name":"James"]))
}
虽然此代码只触发一个:
try! realm.write {
realm.add(Person(value: ["name":"John"]))
realm.add(Person(value: ["name":"Chris"]))
realm.add(Person(value: ["name":"James"]))
}
基于@ bdash评论的澄清,即使docs state that “每次提交涉及该Realm的写入事务时,无论写入事务发生在哪个线程或进程上,通知处理程序都将被解雇......“,实际上来自几个写入事务的通知可能会根据通知代码处理写入事务所花费的时间合并为一个。