Как использовать уведомления Realm
Я пытаюсь написать приложение в OS X, используя базу данных Realm. В моей программе мне нужно дождаться завершения записи области, а затем вызвать новый veiwcontroller. После долгих исследований кажется, что использование встроенного Центра уведомлений Realm было бы уместным. Согласно документации Realm, формат должен работать следующим образом
let token = realm.addNotificationBlock { notification, realm in
viewController.updateUI()
}
Я понимаю, что это быстрое закрытие, но я не уверен, как использовать его. Если бы я изменил код на это
let token = realm.addNotificationBlock { notification, realm in
println("The realm is complete")
}
будет ли это печатать на моем экране отладки, когда запись будет завершена? Или проще говоря, как выполнить некоторый код только после получения уведомления?
Если я помещаю вышеуказанный код в свое приложение, я не вижу свою строку на экране отладки, все, что я вижу, это следующее:
2015-07-31 16:08: 17.138 Счет-Фактура Терапии[27979: 2208171] Rlmnotificationtoken выпущен без отмены регистрации уведомления. Вы должны держаться за Rlmnotificationtoken вернулся из addNotificationBlock и вызов removeNotification: когда вы больше не хотите получать уведомления RLMRealm.
2 ответов
сделать notificationToken
в Ивар:
var notificationToken: NotificationToken?
deinit{
//In latest Realm versions you just need to use this one-liner
notificationToken?.stop()
/* Previously, it was needed to do this way
let realm = Realm()
if let notificationToken = notificationToken{
realm.removeNotification(notificationToken)
}
*/
}
override func viewDidLoad() {
super.viewDidLoad()
let realm = Realm()
notificationToken = realm.addNotificationBlock { [unowned self] note, realm in
self.tableView.reloadData()
}
...
}
С Realm последние документы (3.0.1):
добавить notificationToken.invalidate()
чтобы отписаться от уведомлений.
Подробнее:
-
объявить
notificationToken
как переменная классаvar notificationToken: NotificationToken?
-
установить
notificationToken
наviewDidLoad()
notificationToken = realm.observe { [unowned self] note, realm in self.tableView.reloadData() }
-
отменить регистрацию из уведомления в
viewWillDisappear(animated: Bool)
notificationToken?.invalidate()
изменить Примечания:
-
notificationToken.stop()
устарела. -
realm.addNotificationBlock...
вызовет следующую ошибку:значение типа "Realm" не имеет члена "addNotificationBlock"