основной поток имеет значение NULL в swift, хотя я указал, что работает в основном потоке - PullRequest
0 голосов
/ 19 октября 2018

Я получаю контакт на моем телефоне, используя этот код

DispatchQueue.main.async {
        let allowedCharset = CharacterSet
            .decimalDigits
        let store = CNContactStore()
        //store.requestAccess(for: .contacts, complete:() -> ()) { (granted,err) in
        store.requestAccess(for: .contacts) { (granted, err) in
            if let error = err
            {
                print("failed to access",error)
                return
            }
            if (granted)
            {
                print(Thread.current)}

Однако я обнаружил, что пользовательский интерфейс зависает, и я получаю, что текущий поток имеет значение NULL, хотя я указал его для запуска на mainThread.

print (Thread.current) =

1 Ответ

0 голосов
/ 19 октября 2018

Полагаю, проблема в том, что вы выполняете некоторые обновления пользовательского интерфейса в обработчике завершения store.requestAccess.

Обработчик - согласно документации Apple - вызывается не в основном потоке (UI), а врабочий поток:

Обработчик завершения вызывается в произвольной очереди.Рекомендуется использовать методы экземпляра CNContactStore в этом обработчике завершения вместо основного потока пользовательского интерфейса.

Поэтому, если вы выполняете здесь какие-то действия с пользовательским интерфейсом, вы должны отправить ихЗвонит снова в основной поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...