Как использовать уведомления 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()
    

изменить Примечания:

  1. notificationToken.stop() устарела.
  2. realm.addNotificationBlock... вызовет следующую ошибку:

    значение типа "Realm" не имеет члена "addNotificationBlock"