gpt4 book ai didi

ios - 在后台线程中将数据保存到 Realm 时崩溃。 | iOS | swift 4.2

转载 作者:搜寻专家 更新时间:2023-11-01 06:53:16 25 4
gpt4 key购买 nike

DispatchQueue.global(qos: .background).async {
RccContactController.shared.updateDbForAppUsers(contactModels: contacts)
}
DispatchQueue.global(qos: .background).async {
RccContactController.shared.updateSyncStatus(lastCount : lastIndex)
DispatchQueue.main.async {
ContactDataStore.shared.updateContacts(withAppUsers: contacts)
if let safeDelegate = RccContactController.shared.delegate {
safeDelegate.syncedPhonebookContact(contacts: restContacts, appUsers: cont)
}
}
}

上面发生了什么:

  • 通过Socket从服务器获取同步的联系人数据
  • 在后台线程中更新数据库中的应用程序用户
  • 在后台线程中更新数据库中的同步状态,并在该过程通过委托(delegate)通知我的 Controller 之后。

有时我会在第二个线程中崩溃。

enqueued from com.apple.main-thread (thread 1)

我在这里做错了什么?

最佳答案

这样做:

  DispatchQueue(label: "background").async {
RccContactController.shared.updateSyncStatus(lastCount : lastIndex)
ContactDataStore.shared.updateContacts(withAppUsers: contacts)
DispatchQueue.main.async {
if let safeDelegate = RccContactController.shared.delegate {
safeDelegate.syncedPhonebookContact(contacts: restContacts, appUsers: cont)
}
}
}

一般示例:

  DispatchQueue(label: "background").async {
do {
let realm = try Realm(configuration: config)
let obj = realm.resolve(wrappedObj)

try realm.write {
DispatchQueue.main.async {
//Callback or Update UI in Main thread
}
}
}
catch {
//Callback or Update UI in Main thread
}
}

仅在 DispatchQueue.main.async 中执行 UI 操作,其余部分保留在后台线程中。

关于ios - 在后台线程中将数据保存到 Realm 时崩溃。 | iOS | swift 4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55646177/

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