我需要用 UITableView 实现一个 Controller ,它从 一个 Realm ,稍后另一个线程将 Realm 的数据库与在线同步 网络服务。换句话说,我想要一个有可能的 Controller 在离线模式下工作。
我打算这样做。因为这是我第一次接触 Realm 和 GCD, 我想知道我的做法是否正确。
在我的 Controller 中,我将有一个实例 var
var countries: Results<Country>!
在
viewDidLoad()
Controller 的我将用数据填充这个ivar:countries = Realm().objects(Country)
剩下的部分还没有写,所以我不会提供代码。
在
viewDidLoad()
的末尾我会dispatch_async
下载任务 我的 UITableView 的在线数据。下载完成后我会在主队列上dispatch_sync一个任务 其中:
4.1。将重新分配 controller.countries 和
4.2.会打电话controller.reloadData()
重新加载 UITableView
我走的路对吗?
谢谢。
最佳答案
你基本上是对的。对于您的方式,我只有一个更正。
4.1. Will reassign the controller.countries
RLMResults
的特点是一切都是最新的。当您提交添加到 Realm 下载数据的事务时,最新数据将反射(reflect)到 RLMResults
。所以你不需要重新分配 controller.countries
。您可以在提交事务时调用 controller.reloadData()
。
还有一种使用通知的方式。每次提交写入事务时,Realm 实例都会向其他线程上的其他实例发送通知。如果您将通知 block 注册到您的 Realm ,您可以重新加载 block 中的 TableView 。
另请参阅 TableView
示例代码 https://github.com/realm/realm-cocoa/tree/master/examples/ios/objc/TableView
它展示了如何将 Realm 与 UITableView 和后台操作一起使用。
关于ios - 带有 Realm 支持的数据库和在线同步的 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31850072/