Если 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)
}
}
Если содержимое UILabel в интерфейсе мобильного приложения может варироваться от одного короткого слова до двух предложений, то нужно немного постараться, чтобы это выглядело адекватно хорошо на различных устройствах с разными экранами. Когда UILabel не имеет фиксированного размера и должен меняеться динамически в зависимости от количества текста в нем, то это делается следующим образом:
В мае 2011 года я написал и разместил на сайте статью "Как настроить Wi-Fi Router DLINK DIR-300 NRU под Билайн". Писал этот мануал в первую очередь для себя, чтоб качественная шпаргалка всегда была под рукой. Со временем статью немного дополнил и откорректировал в соответствии с новой информацией и фактическим опытом настройки данного типа рутеров. Чуть более чем за полгода эта статья была просмотрена 35 тысяч раз, к ней было написано 5 страниц комментариев к статье: как благодарных, так и...
Как гласит библейская легенда (не смотря на то, что в ней множество нестыковок, как и во всей библии - по мнению французского писателя Лео Таксиля), что при строительстве Вавилонской башни произошло нечто, и все люди стали говорить на разных языках - и из-за этого башню не удалось построить. Так и в авиации до сих пор существуют атавизмы - различные геодезические модели земного шара,...
Компания Garmin вполне заслуженно и, поэтому, весьма уверенно уже много лет сохраняет статус лидера в области авиационных навигаторов (как портативных, так и стационарных) для авиации, кораблей и автомобилей. А тесное сотрудничество с Jeppesen и GIS-организациями дает преимущество в плане создания баз данных. На этой странице содержится информация о циклах обновления навигационных БД Garmin на 2016...
Начиная с версии какой-то 3.xxxx в программе uTorrent появилась реклама. Причем, реклама довольно агрессивная - даже в те минуты, а иногда - секунды, когда программа uTorrent не свернута в трей, ее реклама успевает надоесть. Хорошо, что разработчики приложения uTorrent дали возможность пользователям программы через настройки отключить рекламу.
Пользователи, имеющиие iPad рано или поздно сталкиваются с необходимостью расширить функционал устройства, так нещадно ограниченный яблоневодами. К их сожалению (да и к моему тоже) список дополнительных девайсов для яблочных огрызков весьма мал, зато стоимость зато весьма высока. Напрягает отсутствие полноценного USB-подключеия и файлового менеджера. Хоть разработчики и утверждают, что при...
В некоторых авиационных справочниках (онлайн или установленных отдельных приложений) по аэродромам есть такой параметр - "Признак принадлежности аэродрома" ("aerodrom usage attribute"), который и определяет эту принадлежность.Помимо общеизвестных признаков принадлежности аэродрома - военные, гражданские и совместного базирования, существует еще несколько. Они малораспространены, но иногда...