Es hängt davon ab, warum Sie den Rückruf benötigen, aber es gibt Realm eine Vielzahl von Möglichkeiten, um eine Benachrichtigung bereitstellen kann, wenn Daten geändert wird.
Der häufigste Anwendungsfall ist, wenn Sie eine Objektliste von einem Objekt Results
anzeigen. In diesem Fall können Sie Realm's change notifications Funktion zu aktualisieren, bestimmte Objekte verwenden:
let realm = try! Realm()
let results = realm.objects(Person.self).filter("age > 5")
// Observe Results Notifications
notificationToken = results.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
guard let tableView = self?.tableView else { return }
switch changes {
case .initial:
// Results are now populated and can be accessed without blocking the UI
tableView.reloadData()
break
case .update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
tableView.beginUpdates()
tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}),
with: .automatic)
tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
tableView.endUpdates()
break
case .error(let error):
// An error occurred while opening the Realm file on the background worker thread
fatalError("\(error)")
break
}
}
Realm Objekteigenschaften sind auch KVO-compliant, so dass Sie auch die traditionelle Apple-addObserver
API, wenn Änderungen eine bestimmte Eigenschaft verfolgen können.
Wenn all das passiert, wenn Sie einen sehr spezifischen Anwendungsfall haben, um benachrichtigt zu werden, wenn sich ein Teil von Realm-Daten ändert, können Sie auch eigene Benachrichtigungen mit etwas wie NotificationCenter
implementieren.
Bitte folgen Sie, wenn Sie weitere Erläuterungen benötigen.