Swift 3.1, Xcode 8.3.3
Имам известие за 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()
методът е това, което опреснява моя потребителски интерфейс (който съдържа графика, която се изчертава), виждам трептене / трептене, тъй като всяко опресняване удря.
Има ли начин да се обобщят тези известия в едно, така че да получа само един обновяващ потребителски интерфейс?
Отговори:
2 за отговор № 1Ако настроите блок за известяване в областНапример, ще получите известие за всяка транзакция. За да "агрегирате" отделните уведомления в една, трябва да обедините отделните си транзакции за писане в една.
Например това парче код изстрелва две известия:
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, въпреки че Документите сочат, че "Всеки път, когато е извършена транзакция за записване, в която се включва тази област, без значение коя нишка или процес е извършена, операторът за уведомяване ще бъде уволнен ...", в действителност уведомленията от няколко транзакции за писане могат да бъдат обединени в едно, въз основа на времето, необходимо на кода за уведомяване да обработва транзакциите за писане.