Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以编程方式链接CNC联系人_Ios_Contacts_Ios9 - Fatal编程技术网

Ios 以编程方式链接CNC联系人

Ios 以编程方式链接CNC联系人,ios,contacts,ios9,Ios,Contacts,Ios9,在我的应用程序中,我想创建一个新联系人。如果已经存在同名联系人,我想将新联系人链接到旧联系人 我已经查看了CNContact和CNContactStore的参考资料,没有找到任何链接联系人的方法。这是否可能,如果可能,如何实现?在IOS9中,代表同一个人的不同帐户中的联系人可以自动链接在一起 要实现这一点,您应该确保新插入的联系人的名称与您想要统一的联系人的名称相匹配 下面链接的文档给出了iCloud和Facebook上的“John Applesed”示例 以下是将联系人与联系人存储中已存在的联

在我的应用程序中,我想创建一个新联系人。如果已经存在同名联系人,我想将新联系人链接到旧联系人


我已经查看了CNContact和CNContactStore的参考资料,没有找到任何链接联系人的方法。这是否可能,如果可能,如何实现?

在IOS9中,代表同一个人的不同帐户中的联系人可以自动链接在一起

要实现这一点,您应该确保新插入的联系人的名称与您想要统一的联系人的名称相匹配

下面链接的文档给出了iCloud和Facebook上的“John Applesed”示例


以下是将联系人与联系人存储中已存在的联系人合并的代码。仅供参考,唯一值(如给定姓名、姓氏)将被替换,而数字、电子邮件、地址等数组将附加现有值。干杯

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
    picker.dismiss(animated: true, completion: nil)
    let identifier = contact.identifier
    updateContact(contactIdentifier: identifier)
}

func updateContact(contactIdentifier: String){

    let keysToFetch = [CNContactViewController.descriptorForRequiredKeys()]
    let contactStore = CNContactStore()
    do {
        let contactToUpdate =  try contactStore.unifiedContact(withIdentifier: contactIdentifier, keysToFetch: keysToFetch).mutableCopy() as! CNMutableContact
        if contactToUpdate.familyName.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
            contactToUpdate.familyName = "your value"
        }
        if contactToUpdate.givenName.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
            contactToUpdate.givenName = "your value"
        }
        if contactToUpdate.organizationName.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
            contactToUpdate.organizationName = "your value"
        }
        if contactToUpdate.jobTitle.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
            contactToUpdate.jobTitle = "your value"
        }
  // here the contact used below is the one that you want to merge with 
     an existing one.

        for i in contact.phoneNumbers {
            contactToUpdate.phoneNumbers.append(i)
        }
        for i in contact.emailAddresses {
            contactToUpdate.emailAddresses.append(i)
        }
        for i in contact.postalAddresses {
            contactToUpdate.postalAddresses.append(i)
        }
        let contactsViewController = CNContactViewController(forNewContact: contactToUpdate)
        contactsViewController.delegate = self
        contactsViewController.title = "Edit contact"
        contactsViewController.contactStore = contactStore
        let nav = UINavigationController(rootViewController: contactsViewController)
        DispatchQueue.main.async {
            self.present(nav, animated: true, completion: nil)
        }

    }
    catch {
        print(error.localizedDescription)
    }
}

我不确定这一点,但我怀疑iOS只会跨不同的源进行合并。如果您在同一个通讯簿中创建了两个联系人,它们将不会合并


联系人库中对此区域的支持非常少。您可以使用CNContact.isUnifiedWithContact(带标识符:)检测某个联系人是否统一并链接到另一个特定联系人,您可以决定是否返回统一联系人。

除了创建新的
CNMutableContact
并手动合并属性而忽略重复项之外,您是否找到了合并两个联系人的方法?如果你能合并两个联系人,你能告诉我如何合并吗?@Adeel我还没有找到解决方案,但我也有一段时间没有找到。