У меня есть ошибка (которую я встречаю уже второй раз) в нашем проекте, где я просто добавляю представление в верхней части представления UIViewController. Ничего выдающегося, что-то вроде этого:Недостатки пользовательского интерфейса, несмотря на то, что операции пользовательского интерфейса выполняются по основной теме
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.displayEmailNotificationsIfNeeded()
}
Исправлена ошибка не в том, что по какой-то причине Auto Layout работает неправильно и не добавить его в верхней части, а вокруг 60pt ниже, чем это необходимо. Я подозреваю, что ~ 60pt исходит из ручной регулировки ограничения сверху, чтобы включить панель навигации и строку состояния, но это не очень важно.
Дело в том, что проблема исчезает, если я запускаю метод явно на главной очереди, как это:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print("is main thread: ", NSThread.isMainThread())
dispatch_async(dispatch_get_main_queue(), {() -> Void in
print("is main thread inside block: ", NSThread.isMainThread())
self.displayEmailNotificationsIfNeeded()
})
}
печати заявления вернуться true
для обоих случаев. Это не ужасно, но просто из любопытства я хочу понять, что это за причина. Есть ли способ отладить эту ситуацию и понять, почему явное выполнение операций с основным потоком устраняет некоторые сбои пользовательского интерфейса?