この警告は、Xcode 9ベータ2を使用してメインスレッドの外でデリゲートを呼び出すことができないため、深刻な問題を引き起こします。
また、メインスレッドからのみデリゲートを呼び出すことをお勧めしますよね?では、なぜこれがアプリをクラッシュさせるのでしょうか?
このようにメインスレッドから呼び出すだけです。
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication delegate] fooBar];
});
このようにアプリのデリゲートに手を伸ばすことは、アーキテクチャが少しクリーンアップを使用できることのヒントです。
任意のスレッドからデリゲートを呼び出すことができます。 UIKit呼び出しのメインスレッドにいることを確認するだけです。または、CoreDataオブジェクトが期待する正しいスレッド上にいること。それはすべて、オブジェクトのAPIコントラクトに依存します。
Swiftでは、DispatchQueue.main.async
を使用して、メインスレッドからUI制御メソッドを呼び出すこともできます。
DispatchQueue.main.async {
YourUIControlMethod()
}