使用PromiseKit时更新Realm对象时出现问题

时间:2019-04-05 22:47:16

标签: ios realm promisekit

从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对象的解决方法,但这应该可以在同一线程上执行,对吗?

1 个答案:

答案 0 :(得分:1)

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