我需要使用UITableView实现一个控制器来填充数据 Realm和后来的另一个线程将Realm的数据库与在线同步 网络服务。换句话说,我想拥有一个可能的控制器 在离线模式下工作。
我打算这样做。因为这是我第一次使用Realm和GCD, 如果我正确的话,我想承诺。
在我的控制器中,我将有一个实例var
var countries: Results<Country>!
在控制器的viewDidLoad()
中,我将使用数据填充此ivar:
countries = Realm().objects(Country)
其余部分尚未编写,因此我不会提供代码。
在viewDidLoad()
结束时,我将dispatch_async
下载任务
我的UITableView的在线数据。
下载完成后,我将在主队列上调度任务一个任务 其中:
4.1。将重新分配controller.countries和
4.2。将调用controller.reloadData()
重新加载UITableView
我是在正确的路上吗?
谢谢。
答案 0 :(得分:0)
你大多是正确的。我只对你的方式进行了修正。
4.1。将重新分配controller.countries
RLMResults
具有一切始终都是最新的功能。当您提交添加到Realm下载数据的事务时,最新数据将反映到RLMResults
。因此,您无需重新分配controller.countries
。您可以在提交交易时调用controller.reloadData()
。
还有一种使用通知的方法。每次提交写入事务时,Realm实例都会向其他线程上的其他实例发送通知。如果您向领域注册了通知块,则可以在块中重新加载表视图。
另请参阅TableView
示例代码https://github.com/realm/realm-cocoa/tree/master/examples/ios/objc/TableView
它展示了如何将Realm与UITableView和后台操作一起使用。