/ / Уведомяване за царството, което се изстрелва няколко пъти Последователно - бързо, царство

Уведомяване за царството, което изстрелва няколко пъти последователно - бързо, царство

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, въпреки че Документите сочат, че "Всеки път, когато е извършена транзакция за записване, в която се включва тази област, без значение коя нишка или процес е извършена, операторът за уведомяване ще бъде уволнен ...", в действителност уведомленията от няколко транзакции за писане могат да бъдат обединени в едно, въз основа на времето, необходимо на кода за уведомяване да обработва транзакциите за писане.