Извлечено iOS контактов с таблицей, но данные таблицы не отображаются, пока я не нажму на другой элемент панели вкладок и не вернусь на вкладку таблицы - PullRequest
0 голосов
/ 14 марта 2020

Эта функция вызывается в моем "viewDidLoad ()". Я могу получить все контакты успешно, хотя данные не отображаются, пока я не нажму другой элемент панели вкладок, а затем вернусь к элементу панели вкладок просмотра таблицы. Вот мой код ..

 func getContacts()
     {
         print("Attempting to fetch Contacts")
         let store = CNContactStore()

         store.requestAccess(for: .contacts) { (granted, err) in
             if let err = err {
                 print("failed to request Access", err)
                 return
             }
         if granted {
             print("access granted")
             let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
             let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
            request.sortOrder = CNContactSortOrder.userDefault
             do {
                var contactNames = [ContactNames]()

                 try store.enumerateContacts(with: request, usingBlock: {(contact, stopPointerIfYouWantToStopEnumerating) in

                    contactNames.append(ContactNames(contact: contact))

                 })

                self.contactsArray = contactNames


             }catch let err {
                 print("Failed to enumerate contacts", err)
             }


         } else{
             print("access denied")
             }

         }

     }

1 Ответ

2 голосов
/ 14 марта 2020

Ваши данные не будут загружены при первом заполнении таблицы. Это работает, когда вы перемещаетесь с использованием вкладок, потому что данные загружены в точке, которую вы возвращаете на вкладку табличного представления, и это вызывает перезагрузку табличного представления.

Предполагая, что ваш источник данных табличного представления использует self.contactsArray, вам просто нужно позвонить tableview.reloadData() после присвоения ваших данных self.contactsArray.

Обязательно сделайте это в главном потоке.

self.contactArray = contactNames
DispatchQueue.main.async {
    self.tableView.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...