如何使用Realm通知

Dan*_*uca 7 cocoa realm ios swift

我正在尝试使用Realm数据库在OS X中编写应用程序.在我的程序中,我需要等待Realm写入完成然后调用一个新的veiwcontroller.经过大量研究后,似乎使用Realm的内置通知中心是合适的.根据Realm文档,格式应该像这样工作

let token = realm.addNotificationBlock { notification, realm in
    viewController.updateUI()
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个快速关闭,但我不知道如何使用它.如果我将代码更改为此

let token = realm.addNotificationBlock { notification, realm in
   println("The realm is complete")
}
Run Code Online (Sandbox Code Playgroud)

写完成后会打印到我的调试屏幕吗?或者更简单地说,如何在收到通知后才执行某些代码?

如果我将上面的代码放在我的应用程序中,我在调试屏幕中看不到我的所有内容,我看到如下:

2015-07-31 16:08:17.138 Therapy Invoice [27979:2208171] RLMNotificationToken在未取消注册通知的情况下发布.您必须保持从addNotificationBlock返回的RLMNotificationToken并调用removeNotification:当您不再希望接收RLMRealm通知时.

Ida*_*dan 17

来自Realm最新文档(3.0.1):

添加notificationToken.invalidate()以从通知中取消注册.

详细地:

编辑笔记:

  1. notificationToken.stop() 已弃用.
  2. realm.addNotificationBlock... 将导致以下错误:

    "Realm"类型的值没有成员'addNotificationBlock'


Shm*_*idt 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()
    }
...
}
Run Code Online (Sandbox Code Playgroud)

  • `realm.removeNotification` [deprecated](https://github.com/realm/realm-cocoa/issues/317),使用`notificationToken.stop()` (6认同)
  • notificationToken.stop()很旧,请使用notificationToken.invalidate() (2认同)