How to fetch all contacts record in iOS 9 using Contacts Framework

前端 未结 20 1652
[愿得一人]
[愿得一人] 2020-11-28 01:52

Most part of AddressBook framework is deprecated in iOS 9. In the new Contacts Framework documentation only shows how to fetch records matches a NSPredicate, bu

20条回答
  •  盖世英雄少女心
    2020-11-28 02:26

    Swift 4.2 . Fetch contact numbers with image

    info.plist file data
    NSContactsUsageDescription
    $(PRODUCT_NAME) requires to access your contacts ...
    
    
    
    //MARK:- Fetch All Contacts of Phone
    func fetchContacts(completion: @escaping (_ result: [CNContact]) -> Void){
        DispatchQueue.main.async {
            var results = [CNContact]()
            let keys = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactMiddleNameKey,CNContactEmailAddressesKey,CNContactPhoneNumbersKey,CNContactThumbnailImageDataKey] as [CNKeyDescriptor]
            let fetchRequest = CNContactFetchRequest(keysToFetch: keys)
            fetchRequest.sortOrder = .userDefault
            let store = CNContactStore()
            store.requestAccess(for: .contacts, completionHandler: {(grant,error) in
                if grant{
                    do {
                        try store.enumerateContacts(with: fetchRequest, usingBlock: { (contact, stop) -> Void in
                            results.append(contact)
                        })
                    }
                    catch let error {
                        print(error.localizedDescription)
                    }
                    completion(results)
                }else{
                    print("Error \(error?.localizedDescription ?? "")")
                }
            })
        }
    }
    

    }

    Function Calling in Did Load Method

    var arrpic = NSMutableArray()
    
     override func viewDidLoad() {
        super.viewDidLoad()
    
        fetchContacts(completion: {contacts in
            contacts.forEach({print("Name: \($0.givenName), number: \($0.phoneNumbers.first?.value.stringValue ?? "nil")")
                self.arrfname.append("\($0.givenName)")
                self.arrlname.append("\($0.familyName)")
                self.arrnumber.append("\($0.phoneNumbers.first?.value.stringValue ?? "nil")")
                var img = UIImage()
                if $0.thumbnailImageData != nil
                {
                    img = UIImage.init(data: $0.thumbnailImageData!)!
                    self.arrpic.add(img)
                }
                else
                {
                    self.arrpic.add("")
                }
            })
            if contacts.count > 0
            {
                self.tablev.reloadData()
            }
        })
    }
    

提交回复
热议问题