時々、コード内の別の場所から - UIViewController.presentViewController(a, b, c)
を実行したい場合があります。我々が得る:「警告:既に提示している*を*試してみよう」のブレークポイント
Warning: Attempt to present * on * which is already presenting *
それは、この警告に破ることは可能ですか?このためにブレークポイントを設定するにはどうすればよいですか?
時々、コード内の別の場所から - UIViewController.presentViewController(a, b, c)
を実行したい場合があります。我々が得る:「警告:既に提示している*を*試してみよう」のブレークポイント
Warning: Attempt to present * on * which is already presenting *
それは、この警告に破ることは可能ですか?このためにブレークポイントを設定するにはどうすればよいですか?
最初にまず記号的なブレークポイントを-[UIViewController presentViewController:animated:completion:]
に設定する必要があります。これはXcodeのAdd Symbolic Breakpoint
機能で簡単に追加できます。
第2に、ビューコントローラが既に何かを提示しているときにのみブレークポイントがヒットするように条件を設定する必要があります。プログラム的に言えば、これはpresentedViewController
プロパティがnilでないことを意味します。ここでのトリックは、$arg1
(詳細はhere)を使用して実行できるself
暗黙のパラメータにアクセスすることです。これを済ませたら、残りは簡単です。
はここでブレークポイントは次のようになります方法は次のとおりです。要するに
:
記号:-[UIViewController presentViewController:animated:completion:]
条件:[(UIViewController *)$arg1 presentedViewController] != nil
右!私はpresentViewControllerを呼び出してどこでも、presentViewControllerをコード内のチェックしたくないと思っていました。そのif-checkをブレークポイントの条件として使うことができます。驚くばかり!それが動作することを確認するだけです。 – smat88dd
$ arg1についてのあなたのリンクにも感謝します – smat88dd