3

ルートに TableViewController を持つ Mvvmcross アプリがあります。各行は DetailViewController を開きます。それぞれの内部では、EditViewController で編集できます。

したがって、ビューごとに ViewModel があります。私はここで2つの問題を扱っています:

1)DetailViewControllerで、データベースメッセージにサブスクライブします。閉じるときは、この subscribeToken を破棄する必要があります。したがって、DetailViewController が破棄されたときにこれを呼び出す必要があります。しかし、editViewControllerを開くと、DetailViewControllerが聞く必要があるというメッセージが送信されるため、消えたときに呼び出すことはできません。

したがって、ViewDidDisappear メソッドで破棄することはできません。しかし、他のオプションは ViewDidUnload にあります。ただし、このメソッドは MemoryWarnings でのみ呼び出されます。したがって、トークンを破棄していません。それはよくありません。

2) 他の問題は、私が開いている DetailsViewcontroller ごとに、現在の ID を設定に保存する必要があることです。そして、離れるときは、設定から削除する必要があります。したがって、ここでも同じ問題が発生します。ViewDidDisappear で削除すると、EditViewController にいるときに削除されますが、そこに設定する必要があります。しかし、ViewDidUnload でのみ削除すると呼び出されず、この変数を削除する必要があります。

両方のケースで OnDestroy メソッドをいつ呼び出す必要がありますか?

Android では、OnDestroy を呼び出しています。iOSのどこで呼び出す必要がありますか?

よろしくお願いします。

4

1 に答える 1

4

ViewDidUnloadはオプションではありません - 非推奨であり、呼び出されません (かなり前から - たとえば iOS5 以降?)。

iOS は、ViewController が「使用されなくなった」場合の一般的な ViewController オーバーライドを実際には提供していません。ただし、アプリで ViewController を制御できる場合 (たとえば、一度使用した ViewController を再利用しない NavigationController を使用している場合) はpopped、独自の「クリーンアップ」メソッドを提供してから呼び出すのが比較的簡単なはずです。独自のナビゲーション コントロール ロジック - たとえば、NavigationController によって生成されたイベントを使用するカスタム プレゼンターから。

于 2015-01-26T09:50:19.233 に答える