Realm WebサイトのCollection Notificationsに関するドキュメントによれば、Results
オブジェクトをクエリから取り出して、通知ブロックを割り当てることができます。その結果セット(新しい追加、変更、削除を含む)でオブジェクトが変更されると、ブロックは変更された特定のインデックスでトリガーされます。
// 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
}
}
ここで子供たちが何を意味しているのか分かりません。つまり、Parent
オブジェクトにList
プロパティがある場合は、Parent
オブジェクトのどの子オブジェクトが変更されたかに関する細かいインデックス情報は得られませんが、子オブジェクトが属するParent
オブジェクト自体のインデックスは引き続き取得されます。
出典
2016-11-22 00:14:02
TiM