【问题标题】:UITableView with Realm backed db and online syncing带有 Realm 支持的数据库和在线同步的 UITableView
【发布时间】:2015-08-06 08:01:49
【问题描述】:

我需要使用 UITableView 实现一个控制器,该控制器从 一个领域,然后另一个线程将领域的数据库与在线同步 网络服务。换句话说,我想要一个有可能的控制器 在离线模式下工作。

我打算这样做。因为这是我第一次使用 Realm 和 GCD, 我想了解我是否走在正确的道路上。

  1. 在我的控制器中,我将有一个实例 var

    var countries: Results<Country>!

  2. 在控制器的viewDidLoad() 中,我将用数据填充这个 ivar:

    countries = Realm().objects(Country)
    

剩下的部分还没写,就不提供代码了。

  1. viewDidLoad()的末尾我会dispatch_async一个任务下载 我的 UITableView 的在线数据。

  2. 下载完成后,我会在主队列上 dispatch_sync 一个任务 其中:

4.1。将重新分配 controller.countries 和
4.2.将调用controller.reloadData() 重新加载 UITableView

我走对了吗?

谢谢。

【问题讨论】:

    标签: ios swift uitableview grand-central-dispatch realm


    【解决方案1】:

    你大部分是正确的。我对你的方式只有一个更正。

    4.1。将重新分配controller.countries

    RLMResults 具有始终保持最新状态的功能。当您提交添加到 Realm 下载数据的事务时,最新数据将反映到 RLMResults。所以你不需要重新分配controller.countries。当事务提交时,你可以直接调用controller.reloadData()

    还有另一种使用通知的方式。每次提交写事务时,领域实例都会向其他线程上的其他实例发送通知。如果您将通知块注册到您的领域,您可以重新加载块中的表格视图。

    另见TableView 示例代码https://github.com/realm/realm-cocoa/tree/master/examples/ios/objc/TableView 它展示了如何将 Realm 与 UITableView 和后台操作一起使用。

    【讨论】:

    • 谢谢!顺便说一句,您的回答澄清了 Realm 的文档,其中说结果“是一种自动更新容器类型”。
    • 在API文档realm.io/docs/objc/latest/api/Classes/RLMResults.html中。文档说“RLMResults 是 Realm 中从对象查询返回的自动更新容器类型。”
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多