Я пытаюсь получить контакты пользователей. Все работает хорошо, за исключением того факта, что когда пользователь нажимает кнопку, чтобы разрешить нам доступ к контактам, контакты печатаются в консоли, но переход к другому контроллеру просмотра занимает много времени, и мой вывод в консоль идет как сумасшедший, говоря:
Это приложение модифицирует механизм автомакета из фонового потока после того, как доступ к механизму был получен из основного потока.
со списком стеков...
Прочитав об ошибке в StackOverflow, я обнаружил, что мне нужен DispatchQueue.main.async(). Однако я не могу понять, куда его положить? Может ли кто-нибудь объяснить это мне?
Это код выхода действия, когда кнопка нажата и где возникает ошибка:
@IBAction func didTapFindContacts(_ sender: Any) {
fetchContacts()
}
func fetchContacts() {
contactStore.requestAccess(for: .contacts) { (success, error) in
if let error = error {
print("failed to request access:", error)
return
}
if success {
self.performSegue(withIdentifier: "inviteFriends", sender: nil)
let contactStore = CNContactStore()
let keys = [CNContactGivenNameKey,
CNContactPhoneNumbersKey,
CNContactFamilyNameKey] as [Any]
let request = CNContactFetchRequest(keysToFetch: keys as! [CNKeyDescriptor])
do {
try contactStore.enumerateContacts(with: request){ (contact, stop) in
// Array containing all unified contacts from everywhere
let name = contact.givenName
let familyName = contact.familyName
let number = contact.phoneNumbers.first?.value.stringValue
let contactsAppend = ContactStruct(givenName: name, familyName: familyName, number: number!)
self.contacts.append(contactsAppend)
print(name)
}
} catch {
print("unable to fetch contacts")
}
}
//go to other page
}
}