TL; DR:
Усі маніпуляції з користувацьким інтерфейсом повинні виконуватися в Основній нитці, щоб уникнути проблем. Якщо цього не вдалося зробити, Main Thread Checker (нещодавно введена функція налагодження в XCode 9) видасть проблеми під час виконання. Тож оберніть свій код в блоці Main Thread, як показано нижче, щоб уникнути збоїв та попереджень про час роботи.
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
У версіях Xcode перед версією. 9, попередження, пов'язані з основним потоком, надрукуються в області консолі текстуально. У будь-якому випадку, ви можете за бажанням вимкнути ( не рекомендований підхід ) перевірку основної нитки в налаштуваннях діагностики в редагуванні схеми .
Пояснення:
Apple представила новий варіант налагодження в XCode 9 для перевірки проблем під час виконання для UIKit та інших API, які маніпулюють елементами інтерфейсу. Якщо якісь зміни в елементах користувацького інтерфейсу від API UIKit під час виконання, без блоку основного потоку, є великою ймовірністю викликати збої та збої в користувацькому інтерфейсі. Головна Thread Checker включена за замовчуванням , щоб зловити ці питання під час виконання. Ви можете вимкнути головну перевірку потоків у вікні Редагування схеми, як показано нижче, хоча насправді це робити не рекомендується:
Якщо у вас є якісь старіші SDK або фреймворки, під час оновлення до Xcode 9 ви можете зіткнутися з цим попередженням, оскільки деякі виклики методу UIKit не були б обгорнуті в основну нитку. Оновлення їх до останньої версії дозволить вирішити проблему (якщо розробник це знає та виправив).
Цитата з бета-версії XCode 9:
- Нове у Xcode 9 - Перевірка основної нитки.
- Увімкнути виявлення зловживання API інтерфейсу користувача з фонового потоку
- Виявляє виклики методів AppKit, UIKit та WebKit, які не зроблені в основному потоці.
- Автоматично вмикається під час налагодження та може бути відключений на вкладці Діагностика редактора схем.
- Main Thread Checker працює з мовами Swift та C.
UIApplication.shared.registerForRemoteNotifications()
основного потоку. :) Нехай google, як це називати, в основній темі ...