2015-07-31 5 views
5

Я пытаюсь написать приложение в OS X с использованием базы данных Realm. В моей программе мне нужно дождаться завершения записи в Realm, а затем вызвать новый контроллер. После долгих исследований кажется, что использование встроенного центра уведомлений Realm будет подходящим. Согласно документации 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 Therapy Invoice[27979:2208171] RLMNotificationToken released without unregistering a notification. You must hold on to the RLMNotificationToken returned from addNotificationBlock and call removeNotification: when you no longer wish to receive RLMRealm notifications.

ответ

6

Сделать 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() 
    } 
... 
} 
+4

'realm.removeNotification' [устаревшее] (https://github.com/realm/realm-cocoa/issues/317), использовать' notificationToken. остановки() ' –

7

С Realm latest docs (3.0.1):

Добавить notificationToken.invalidate(), чтобы отменить регистрацию.

В деталях:

  • Объявить notificationToken как класс переменной

    var notificationToken: NotificationToken? 
    
  • Установите notificationToken в viewDidLoad()

    notificationToken = realm.observe { [unowned self] note, realm in 
        self.tableView.reloadData() 
    } 
    
  • Unregister из уведомления в viewWillDisappear(animated: Bool)

    notificationToken?.invalidate() 
    

Редактировать ноты:

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

    Value of type 'Realm' has no member 'addNotificationBlock'

Смежные вопросы