Если xCode при компиляции проекта ругается на часть кода и выдает ошибку, например, такую:
Thread 4: Exception: -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.
Это означает, что данный кусок кода должен выполняться в главном потоке, а не в дополнительном.
Для исправления ситуации нужно поместить этот кусок кода внутрь блока DispatchQueue.main.async.
Так:
DispatchQueue.main.async(execute: {
// здесь вставить свой код
})
Или (сокращенный вариант) так:
DispatchQueue.main.async {
// здесь вставить свой код
}
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
let myRequest = try JSONDecoder().decode(MyRequest.self, from: data)
// токен и имя тогда можно получить так:
var myToken = myRequest.token
var myName = myRequest.callsign
// отобразить Username и токен в интерфейсе (для отладки):
DispatchQueue.main.async(execute: {
self.usernameLabel.text = String(myName)
self.tokenLabel.text = String(myToken)
})
} catch {
// модальное окно - если не верные логин-пароль:
DispatchQueue.main.async {
let modalWindow = UIAlertController(title: "Login Error", message: "Username or password is wrong :( ", preferredStyle: .alert)
let okButton = UIAlertAction(title: "Close", style: .default) {
(ACTION) -> Void in
}
modalWindow.addAction(okButton)
self.present(modalWindow, animated: true, completion: nil)
}
}
Нужно было давеча попасть в небольшую немецкую деревушку - Раунхайм (Raunheim), расположенную не далеко от аэропорта Франкфурт Майн (EDDF/FRA). Расстояние от терминала вроде бы смешное - всего-то около 10 километров, но использовать такси - как-то не спортивно, пешком - не солидно, в результате было принято решение воспользоваться железнодорожным немецким транспортом. Железнодорожный транспорт в Германии очень...
Компания Garmin вполне заслуженно и, поэтому, весьма уверенно уже много лет сохраняет статус лидера в области авиационных навигаторов (как портативных, так и стационарных) для авиации, кораблей и автомобилей. А тесное сотрудничество с Jeppesen и GIS-организациями дает преимущество в плане создания баз данных. На этой странице содержится информация о циклах обновления навигационных БД Garmin на 2016...
Как разделить текстовый файл построчно на несколько отдельных файлов и удалить часть строки? Бесплатно, без СМС, и без Python! Как-то при тестировании процесса ввода в оборот маркированного товара пришлось иметь дело с большим количеством кодов SGTIN...
На всех российских самолетах и на иностранных гражданских воздушных судах по умолчанию нет оборудования TACAN. При заходе на посадку по схеме, например, VOR/TAC или еще хуже - просто TACAN от этого такана бортовое оборудование может получать только информацию по дальности (и то не повсем используемым каналам и частотам), курсового наведения не будет. TACAN (tactical air navigation system) -...
Каждый эксплуатант (авиакомпания) при выполнении полетов должен тем или иным способом определять эксплуатационные минимумы для взлета и захода на посадку для каждого аэродрома с учетом: наличия/отсутствия/работосопособности системы огней ВПП, функционирования наземных и бортовых навигационных средств, препятствий в районе аэродрома и минимума командира воздушного судна. Эксплуатационные минимумы...
Как известно, по умолчанию корзина Windows создается только на жестких дисках (HDD), на флэшках ее нет. Поэтому, случайно удалив что-нибудь на флешке, для восстановления приходится прибегать к помощи специальных реанимационных программ. Иногда, правда в результате воздействия вирусов на флэшках может появиться визуально похожий на Корзину объект, но это - не настоящая корзина, и в ней кроме вирусов...
Хоть браузер Опера - гавно, некоторые пользователи сети Интернет им все равно пользуются, в том числе и я. Иногда. Когда проверяю как себя ведет какой-нибудь сайт или скрипт в различных браузерах. В этом случае проверка осуществляется на максимально возможном количестве браузеров: Mozilla Firefox, Chrome, Opera, Safari, Internet Explorer.