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

标签 ios swift uitableview grand-central-dispatch realm

我需要用 UITableView 实现一个 Controller ,它从 一个 Realm ,稍后另一个线程将 Realm 的数据库与在线同步 网络服务。换句话说,我想要一个有可能的 Controller 在离线模式下工作。

我打算这样做。因为这是我第一次接触 Realm 和 GCD, 我想知道我的做法是否正确。

  1. 在我的 Controller 中,我将有一个实例 var

    var countries: Results<Country>!

  2. viewDidLoad() Controller 的我将用数据填充这个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 下载数据的事务时,最新数据将反射(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/

相关文章:

ios - 如何在 iOS 中使用 Firebase 修复此 Signal SIGABRT?

swift 包 --verbose generate-xcodeproj 给出错误 : reachedTimeLimit

ios - 如何从另一个 .swift 文件添加 Sprite ?

ios - 无法将 (Timer!) -> Void 转换为 ((CFRunLoopTimer?) ->Void)! - 将 NSTimer 扩展转换为 Swift 3

ios - 如何从 Parse for iOS 检索多个对象

ios - ( ios ) 如何从委托(delegate)中接收 didReceiveLocalNotification

ios - *** -[UITableView _endCellAnimationsWithContext :] when selecting the back button 中的断言失败

objective-c - 如何将工具栏添加到 UITableView obj-c/ios/xcode 的底部

cocoa-touch - 使用 Core Data 最有效的方法是什么?

c# - 将 iOS 应用程序升级到 Xamarin 统一 API