iosswiftcontactscncontact

How to sort contacts using Contacts with Swift


I've read official apple documentation about sorting contacts, although I am not sure how to implement it. So, here is fetch request:

let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)

and my prefered sort order:

let sortOrder = CNContactSortOrder.UserDefault

and this is how I usually fetch contacts:

    do {
        try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
                self.contacts.append(contact)
        })
    }
    catch let error as NSError {
        print(error.localizedDescription)
    }

Now what should I do with sortOrder? Where and should I include in my whole fetching process?


Solution

  • Updated For Swift 4.0

    let fetchRequest = CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey as CNKeyDescriptor, CNContactFamilyNameKey as CNKeyDescriptor, CNContactMiddleNameKey as CNKeyDescriptor, CNContactEmailAddressesKey as CNKeyDescriptor,CNContactPhoneNumbersKey as CNKeyDescriptor])
    
            fetchRequest.sortOrder = CNContactSortOrder.userDefault
    
            let store = CNContactStore()
    
            do {
                try store.enumerateContacts(with: fetchRequest, usingBlock: { (contact, stop) -> Void in
                  //  print(contact.phoneNumbers.first?.value ?? "not found")
    
                })
            }
            catch let error as NSError {
                print(error.localizedDescription)
            }
    

    Old Version write like this

     fetchRequest.sortOrder = CNContactSortOrder.UserDefault
    

    after fetchRequest object created so your final output is like

    let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)
    
    fetchRequest.sortOrder = CNContactSortOrder.UserDefault
    
     do {
            try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
                    self.contacts.append(contact)
            })
        }
        catch let error as NSError {
            print(error.localizedDescription)
        }