- [Делегат UIApplication] должен вызываться только из основного потока

Это предупреждение приводит к серьезной проблеме, потому что я действительно не могу вызвать делегата вне основного потока, используя Xcode 9 beta 2. Странно то, что это работало, когда я использовал Xcode 8.3.3.

Также я подумал, что было бы хорошей практикой вызывать делегатов только из основного потока, не так ли? Итак, почему это приводит к сбою приложения?

Ответ 1

Просто вызовите его из основного потока, как это.

dispatch_async(dispatch_get_main_queue(), ^{
  [[UIApplication delegate] fooBar];
});

Привлечение к делегату приложения, подобному этому, - это намек на то, что ваша архитектура может использовать небольшую очистку.

Вы можете вызывать делегатов из любого потока, который вы хотите. Вам нужно только убедиться, что вы находитесь в основном потоке для вызовов UIKit. Или что вы на правильной нити, которую ожидают объекты CoreData. Все зависит от контракта API, который ваши объекты имеют.