带有 Realm 支持的数据库和在线同步的 UITableView

UITableView with Realm backed db and online syncing

我需要使用 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

我走的路对吗?

谢谢。

你基本上是对的。我对你的方式只有一个更正。

4.1. Will reassign the controller.countries

RLMResults 的特点是一切都是最新的。当您提交添加到 Realm 下载数据的事务时,最新数据将反映到 RLMResults。所以你不需要重新分配 controller.countries。您可以在事务提交时调用 controller.reloadData()

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

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