Как получить контакты в tableView в Swift? 'CNPropertyNotFetchedException' - PullRequest
0 голосов
/ 09 апреля 2020

Я создал таблицу с ячейкой. в изображении и имени ячейки таблицы есть номера меток.

как получить номер телефона

    cell.phoneNumber.text = contacts[indexPath.row].phoneNumber

это мой контроллер:

  import UIKit
 import Contacts

 class ContactsViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var joinersTableView: UITableView!
var contacts = [CNContact]()

override func viewDidLoad() {
    super.viewDidLoad()
    joinersTableView.register(UINib(nibName: "ContactsTableViewCell", bundle: nil), forCellReuseIdentifier: "ContactsTableViewCell")
    ContactsModel.shared.getLocalContacts {(contact) in
        self.contacts.append(contact!)
        self.joinersTableView.reloadData()
    }
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return contacts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell: ContactsTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ContactsTableViewCell") as! ContactsTableViewCell
    cell.nameLbl.text    = contacts[indexPath.row].givenName + " " + contacts[indexPath.row].familyName
    cell.empRoleLbl.text = contacts[indexPath.row].phoneticMiddleName
    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return 65.0
}
}

Это модель:

import UIKit
import Contacts
import ContactsUI

class ContactsModel: NSObject {

static let shared = ContactsModel()
private override init(){}
typealias contacts = (CNContact?) -> ()
func getLocalContacts(completion:@escaping contacts) {
    let contacts     = CNContact()
    let contactStore = CNContactStore()
    let keys    = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName),CNContactPhoneNumbersKey] as [Any]
    let request = CNContactFetchRequest(keysToFetch: keys as! [CNKeyDescriptor])
    do {
        try contactStore.enumerateContacts(with: request) {(contact, stop) in
            completion(contact)
        }
    } catch {
        print(error.localizedDescription)
        completion(contacts)
    }
}
}

, если я запускаю проект, получая это

Завершение приложения из-за неперехваченного исключения 'CNPropertyNotFetchedException ', причина:' Свойство не было запрошено при получении контакта. '

...