问题描述
我正在实现从备份中恢复联系人的功能。我遇到了大量联系人 (> 1000) 的问题,通常 try store.execute (saveRequest)
会出错。
private func recoveryContacts(_ contacts: [CNContacts],completion: ((Result<Bool,Error>) -> Void)?) {
var availableRecoveryAttempt = 3
var fetchedContacts = contactFetcher.fetch()
repeat {
deleteallContacts()
saveContacts(contacts)
availableRecoveryAttempt -= 1
fetchedContacts = contactFetcher.fetch()
} while (fetchedContacts.count != contacts.count) && (availableRecoveryAttempt != 0)
completion?(.success(fetchedContacts.count == contacts.count))
}
private func deleteallContacts() {
let saveRequest = CNSaveRequest()
var contacts = contactFetcher.fetch()
contacts
.compactMap { $0.mutablecopy() as? CNMutableContact }
.forEach { saveRequest.delete($0) }
do {
try store.execute(saveRequest)
} catch {
print(error)
}
}
private func saveContacts(_ contacts: [CNContact]) {
let saveRequest = CNSaveRequest()
let containerId = store.defaultContainerIdentifier()
contacts
.compactMap { $0.mutablecopy() as? CNMutableContact }
.forEach { saveRequest.add($0,toContainerWithIdentifier: containerId) }
do {
try store.execute(saveRequest) // this generate error
} catch {
print(error)
}
}
错误:
Error Domain=CNErrorDomain Code=1 "Communication Error" UserInfo={NSLocalizedDescription=Communication Error,NSLocalizedFailureReason=An error occurred while trying to communicate with the Contacts service.}
//和
Error Domain=CNErrorDomain Code=2 "(null)"
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)