2015-01-23 7 views
3

У меня есть приложение Mvvmcross, у которого есть TableViewController в корне. Каждая строка открывает DetailViewController. И внутри каждого из них вы можете редактировать его в EditViewController.Жизненный цикл в MvvmCross

У меня есть ViewModel для каждого вида. Я имею дело с двумя проблемами здесь:

1) В DetailViewController я подписал его на сообщение базы данных. Когда я закрываю его, я должен распорядиться этим подписчиком. Поэтому мне нужно было бы вызвать это, когда DetailViewController будет уничтожен. Но не могу называть его, когда он исчезает, потому что, когда я открываю editViewController, он отправит сообщение, которое должен прослушать DetailViewController.

Поэтому я не могу распоряжаться им в методе ViewDidDisappear. Но другой вариант будет в ViewDidUnload. Но этот метод вызывается только в MemoryWarnings. Таким образом, он не утилизирует токен. Это не хорошо .

2) Другая проблема: для каждого элемента управления DetailsView, который я открываю, мне нужно сохранить в настройках, что такое текущий идентификатор. а затем, когда я ухожу, я должен удалить его из настроек. Так та же проблема здесь. Если я удалю его в ViewDidDisappear, он удалит, когда я нахожусь в EditViewController, и я не могу его установить. Но если я удалю только в ViewDidUnload, он не будет вызываться, и эта переменная должна быть удалена.

Когда я должен вызвать метод OnDestroy для обоих случаев?

В Android я звоню в OnDestroy. Где я должен позвонить в iOS?

Спасибо, что касается

ответ

4

ViewDidUnload не вариант - это осуждается и не будет называться (так давно - например, может быть, так как iOS5).

iOS на самом деле не обеспечивает общее переопределение ViewController, если ViewController «больше не используется». Однако, если у вас есть контроль над ViewControllers в вашем приложении - например, если вы используете NavigationController, который никогда не использует повторно ViewControllers после того, как они были popped - тогда это должно быть относительно прямолинейно, чтобы предоставить свой собственный метод очистки и вызвать его из вашей собственной логики управления навигацией - например, из пользовательского презентатора, используя события, созданные с помощью NavigationController.