添加或更新重复的联系人时,联系人框架不会引发异常

时间:2018-06-13 14:27:53

标签: ios swift ios10 cncontact cncontactstore

这是创建联系人的功能

func createContacts() {

    let newContact = CNMutableContact()

    newContact.givenName = “Joshua’
    newContact.familyName =“Serine”

    let homeEmail = CNLabeledValue(label: CNLabelHome, value: "myhome@example.com" as NSString)
    let workEmail = CNLabeledValue(label: CNLabelWork, value: "mywork@exapmle.com" as NSString)
    newContact.emailAddresses = [homeEmail,workEmail]

    let phoneNo = CNLabeledValue(label: CNLabelPhoneNumberMain, value: CNPhoneNumber(stringValue: “(613) 229-8876”))
    newContact.phoneNumbers = [phoneNo]

    let birthday = NSDateComponents()
    birthday.day = 19
    birthday.month = 9
    birthday.year = 1990
    newContact.birthday = birthday as DateComponents

    let saveRequest = CNSaveRequest()
    saveRequest.add(newContact, toContainerWithIdentifier: nil)
    do {
        try store.execute(saveRequest)
    } catch {
        print(“Error occuurred when updating contacts")
    }

}

这是更新功能

func updateContact(){

    print("Inside update contacts")
    let predicate = CNContact.predicateForContacts(matchingName: “Serine”)
    let keysToFetch = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactEmailAddressesKey]
    let contacts :[CNContact] = try! store.unifiedContacts(matching: predicate, keysToFetch: keysToFetch as [CNKeyDescriptor] )

    for contact in contacts{

        let updatedContact = contact.mutableCopy() as! CNMutableContact
        let newEmail:CNLabeledValue = CNLabeledValue(label: CNLabelHome, value: "anu@example.com" as NSString)
        updatedContact.emailAddresses.append(newEmail)
        let x = updatedContact.emailAddresses.remove(at: 0)
        print(x)

        let saveReq = CNSaveRequest()
        saveReq.update(updatedContact)
        do{
            try store.execute(saveReq)
        }
        catch{
            print("Cannot update as no contact")
        }
    }

现在, 无论我多少次调用这些函数,它都会将重复的值添加到联系人列表中而没有错误

我该怎么做才能避免这些重复的条目。

0 个答案:

没有答案