日々精進

新しく学んだことを書き留めていきます

PushしたViewControllerのviewWillDisappearが呼ばれない場合がある

今日知ってびっくりしたんだけど、
画面を表示してもviewWillDisappearが呼ばれないケースがある(viewWillAppearは呼ばれる)。
どのようなケースかというと、

・pushViewController: animated:を使って、アニメーション付きでViewControllerAを表示する
・アニメーションが終わる前にタブバーのボタンをタップするなどして他の画面に遷移する
・ViewControllerAのviewWillDisappearが呼ばれない(!?)

この場合、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappearのうち、呼ばれるのはviewWillAppearとviewDidDisappearのみ。
viewDidAppearはアニメーションが終わったタイミングで呼ばれるので、このケースで呼ばれなくてもまあ納得出来るが。。
どうもviewDidAppearが呼ばれないと、viewWillDisappearが呼ばれないっぽい。
Pushでなく、Popした場合は、viewDidAppearのみ呼ばれなかった。これは想定通り。
今作っているアプリはviewWillDisappearで通信リクエストをキャンセルしているので、viewWillDisappearが呼ばれないと困る。。
通信リクエストのキャンセルはviewDidDisappearでやった方がいいかも知れない。


この件について検索しても全然情報が出てこなかったので何か勘違いしているのかも。。
勘違いしている点あればご指摘頂きたいです。