gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:34:17 25 4
gpt4 key购买 nike

我想在从 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 收到 In CorrectThreadException。我已经尝试告诉 PromiseKit 在正确的 DispatchQueue 上运行它,如上面的代码所示,但我仍然遇到异常。我知道跨线程使用 Realm 对象的解决方法,但这应该可以在同一线程上实现,对吧?

最佳答案

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

关于ios - 使用 PromiseKit 时更新 Realm 对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55544235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com