Swift - ContactStore 错误无法连接到服务 com.apple.contactsd

Sha*_*abh 5 ios swift cncontactstore

我正在尝试将我手机中的联系人从 Exchange Container 移动到 iCloud Container - 但我遇到了一个奇怪的错误,无法找到任何解决方案......你们中有人遇到过这个问题吗?

2018-10-01 20:18:27.501591+0300 ContactManager[9630:1988935] [Contacts] 与 XPC 服务通信时出错:Error Domain=NSCocoaErrorDomain Code=4097“连接到名为 com.apple.contactsd 的服务”UserInfo={NS连接到名为 com.apple.contactsd} 的服务 2018-10-01 20:18:27.502257+0300 ContactManager[9630:1988988] [Contacts] 错误:到 com.apple.contactsd 的服务连接被中断 保存联系人时出错 错误域= CNErrorDomain Code=1 "通信错误" UserInfo={NSLocalizedDescription=通信错误,NSLocalizedFailureReason=尝试与通讯录服务通信时出错。}

代码片段如下:

 func moveContactFromContainer(sourceContainer: CNContainer, destinationContainer: CNContainer){
        let predicate = CNContact.predicateForContactsInContainer(withIdentifier: sourceContainer.identifier)
        do{
            let results = try contactStore.unifiedContacts(matching: predicate, keysToFetch: keysToFetch as! [CNKeyDescriptor])
            for result in results{

                    print(result.givenName)
                    //print(result.phoneNumbers)
                    let mutableContact1 = result.mutableCopy() as! CNMutableContact
                    let saveRequest1 = CNSaveRequest()
                    saveRequest1.delete(mutableContact1)
                    do {
                        try contactStore.execute(saveRequest1)
                    } catch {
                        print("Error while deleting Contact \(error)")
                    }

                    let mutableContact = result.mutableCopy() as! CNMutableContact
                    let saveRequest = CNSaveRequest()
                    saveRequest.add(mutableContact, toContainerWithIdentifier: destinationContainer.identifier)
                    do {
                        try contactStore.execute(saveRequest)
                    } catch {
                        print("Error while saving Contact \(error)")
                        exit(0)
                    }

            }
            print(results.count)
        }catch{
            print("Error")
        }
    }
Run Code Online (Sandbox Code Playgroud)