@Thomas Goyne Я настроил это, но оно работает только тогда, когда мое приложение находится на переднем плане. Есть идеи?
ался получить данные области в фоновом потоке и добавить блок уведомлений (iOS, Swift).
Основной пример:
func initNotificationToken() {
DispatchQueue.global(qos: .background).async {
let realm = try! Realm()
results = self.getRealmResults()
notificationToken = results.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
switch changes {
case .initial:
self?.initializeDataSource()
break
case .update(_, let deletions, let insertions, let modifications):
self?.updateDataSource(deletions: deletions, insertions: insertions, modifications: modifications)
break
case .error(let error):
fatalError("\(error)")
break
}
}
}
}
func initializeDataSource() {
// process the result set data
DispatchQueue.main.async(execute: { () -> Void in
// update UI
})
}
func updateDataSource(deletions: [Int], insertions: [Int], modifications: [Int]) {
// process the changes in the result set data
DispatchQueue.main.async(execute: { () -> Void in
// update UI
})
}
При этом я получаю
'Can only add notification blocks from within runloops'
Я должен сделать более обширную обработку возвращенных данных и хотел бы вернуться к основному потоку только при обновлении пользовательского интерфейса после завершения обработки.
Другой способ, вероятно, состоит в том, чтобы повторно получить данные после любого обновления в фоновом потоке и затем выполнить обработку, но это похоже на то, что можно избежать издержек.
Любые предложения по лучшей практике, чтобы решить эту проблему?