【问题标题】:Problem updating Realm objects while using PromiseKit使用 PromiseKit 时更新领域对象的问题
【发布时间】:2019-04-06 15:52:26
【问题描述】:

在从 API 取回数据后,我想在后台更新我的 Realm 项目的一些属性。一些 API 调用需要被链接,也就是说,一个调用的结果馈送到另一个调用。 PromiseKit 看起来很有希望,但我无法保持在 Realm 的正确线程上。

let utiliQueue = DispatchQueue.global(qos: .utility)

utiliQueue.async {
    autoreleasepool {

        let realm = try! Realm()
        let itemList = DataManager.getSorterFor("ItemList", in: realm).items
        for item in itemList {

            firstly {
                YouTube.getChannelUploadsPlaylistAndBannerURL(item)
            }.done(on: utiliQueue) { (playlistId: String, bannerURL: String) in

                try! item.realm!.write {
                    item.playlistId = playlistId
                    item.bannerImageURL = bannerURL
                }

            }.catch { error in
                print(error.localizedDescription)
            }
        }
    }
}

当我到达写入事务时,我从 Realm 获得了IncorrectThreadException。我已经尝试告诉 PromiseKit 在正确的 DispatchQueue 上运行它,如上面的代码所示,但我仍然得到异常。我知道跨线程使用 Realm 对象的解决方法,但这应该可以在同一个线程上,对吧?

【问题讨论】:

    标签: ios realm promisekit


    【解决方案1】:

    这里的简短回答是,您上面的代码将根据您的请求对两个任务使用相同的调度队列,但这并不意味着它们将在同一个线程上运行。 GCD(Grand Central Dispatch)将使用其线程池中的一个线程来运行每个任务,但您不能使用调度队列来保证使用相同的线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      相关资源
      最近更新 更多