2014-11-03 1 views
0

В следующем коде я использую многопоточность для моего приложения, чтобы пользователь мог взаимодействовать с пользовательским интерфейсом, а также обрабатывать данные. Тем не менее, в конце функции «Поиск», которая обрабатывает данные, я устанавливаю текст UITextView «Complete», но я получаю следующую ошибку:Ошибка при изменении UIElements во время многопоточности в Swift

*** Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Только бегайте по главной теме!»


Кто-нибудь знает, что я делаю неправильно?

override func viewDidAppear(animated: Bool) { 
super.viewDidAppear(false) 

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 
dispatch_async(dispatch_get_global_queue(priority, 0), {()->() in 

    self.Search() 


    dispatch_async(dispatch_get_main_queue(), { 

    }) 
}) 


} 

ответ

0

Именно потому, что вы обновляете UITextView к «Завершить» приложение ведет себя непредсказуемо. Согласно документации Apple:

Threads are tricky to program with in general and, of course, large parts of Cocoa Touch can only be called from the main thread.

Обновите свою функцию поиска, чтобы убедиться, что она не содержит обновлений пользовательского интерфейса.

Смежные вопросы