理論的な質問があります。今、私はAppleのビューコントローラガイド。
彼らが書きました:
提示されたビュー コントローラを閉じる場合、提示するビュー コントローラに閉じさせるのが望ましい方法です。言い換えると、可能な限り、ビュー コントローラを提示したビュー コントローラが、そのビュー コントローラを閉じる責任も負う必要があります。提示するビュー コントローラに、提示されたビュー コントローラを閉じる必要があることを通知する方法はいくつかありますが、推奨される方法は委任です。
しかし、なぜ提示されたVCでプロトコルを作成し、デリゲート変数を追加し、提示されたVCを閉じるためのデリゲートメソッドを提示VCに作成する必要があるのか説明できません。提示されたビューコントローラメソッド
[self dismissViewControllerAnimated:NO completion:nil]
?
最初の選択肢の方が優れているのはなぜですか? Apple がそれを推奨するのはなぜですか?
ベストアンサー1
Apple は、潜在的に不格好な API に対して、少しは責任を負おうとしているのではないかと思います。
[self dismissViewControllerAnimated:NO completion:nil]
実際には、少し面倒です。提示されたビュー コントローラーでこれを正当に呼び出すことはできますが、これは提示されたビュー コントローラーにメッセージを転送するだけです。VC を閉じる以上の操作を行う場合は、このことを知っておく必要があり、デリゲート メソッドとほぼ同じように扱う必要があります。これは、組み込みの柔軟性に欠けるデリゲート メソッドであるためです。
おそらく彼らは、これがどのように組み立てられているかを本当に理解していない人々によって書かれた大量の悪いコードに遭遇したため、慎重になっているのでしょう。
もちろん、その物事を却下するだけでよいのであれば、どうぞご自由に。
私のアプローチは妥協案ですが、少なくとも何が起こっているのかを思い出させてくれます。
[[self presentingViewController] dismissViewControllerAnimated:NO completion:nil]
[迅速]
self.presentingViewController?.dismiss(animated: false, completion:nil)