0

UIViewControllerのviewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappearを使用しています。
そして、UINavigationControllerを使用してViewControllerをナビゲートします。

たとえば、NSTimerを作成したり、viewWillAppearまたはviewDidAppearに通知を登録したりします。そして、タイマーを無効にするか、viewWillDisappearまたはviewDidDisappearの通知を削除します。

ただし、これらの4つのメソッド(viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear)が呼び出されない場合、プログラムはクラッシュするか、サイクルを保持します。

viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappearが常に呼び出されることが保証されているというドキュメントが見つかりませんでした。

今まで、彼らはいつも呼ばれているようで、私のプログラムは私が期待したように動作します。

しかし、4つのメソッドが呼び出されない場合はありますか?
または、4つのメソッドが通常呼び出されますが、理由もなくランダムに呼び出されない場合もありますか?

4

6 に答える 6

3

私は、viewWillAppearメソッドとviewDidAppearメソッドが常にビューで呼び出されると言うことができます。viewWillDisappearメソッドとviewDidDisappearメソッドは、ビューを別のビューに変更したり、ビューを閉じたりしたときに呼び出されます。たとえば、スクロールビューがある場合、これらのメソッドは呼び出されません。

于 2012-11-12T12:54:17.583 に答える
2

はい、彼らは常に呼ばれています。ビューコントローラの1つをサブクラス化する場合は、必ずスーパークラス実装を呼び出してください。

于 2012-11-12T12:57:53.817 に答える
1

それでも、あなたはそれらの方法を信頼できると思います、viewDidLoadそしてdealloc私にとっては決して失敗しませんでした。

そこで通知を登録および削除できます。しかし、私はあなたのアプリの仕様のすべてを知りません、そして私が推薦するものは実行可能ではないかもしれません。

于 2012-11-12T12:51:54.187 に答える
1

はい、Viewイベントは常に発生しますが、動作をオーバーライドするには、それらを宣言する必要があります。

Appleのドキュメントによると、viewDidUnloadは非推奨です。

UIViewControllerの公式アップルクラスリファレンスについては、このリンクを参照してください

UIViewControllerリファレンス

それは述べています:

UIViewControllerクラスは、これらのイベントが発生したときに呼び出される特定のメソッドを提供します。サブクラスは、これらのメソッドをオーバーライドして、特定の動作を実装できます。

于 2012-11-12T12:56:50.293 に答える
0

これは同じスレッドで、いつでも同じことがmに尋ねられます。ここでこれらを表示できます。

ここに最初のリンク

ここで2番目のもの

于 2012-11-12T12:51:16.233 に答える
0

一部のメソッドが呼び出されない、または2回呼び出されない(たとえば、一度に複数のコントローラーを閉じる/ポップする)場合のバグは別として、iOS 7でスワイプして戻るジェスチャを開始すると、前のコントローラーが部分的に表示されます。ナビゲーションスタックを選択してから、スワイプからバックへのスワイプをキャンセルして、ポップが発生しないようにします。両方のコントローラーですべてのメソッドが呼び出されるわけではないことがわかります。

于 2013-10-06T15:40:11.527 に答える