MvvmCross的生命周期

时间:2015-01-23 19:05:54

标签: ios xamarin mvvmcross lifecycle viewdidunload

我有一个Mvvmcross应用程序,它在root中有一个TableViewController。每行打开一个DetailViewController。在每一个内部,您都可以在EditViewController中编辑它。

所以我为每个视图都有一个ViewModel。我在这里处理两个问题:

1)在DetailViewController中,我订阅了一个数据库消息。当我关闭它时,我必须处理这个subscribeToken。所以当DetailViewController被破坏时我需要调用它。但是当它消失时无法调用它,因为当我打开editViewController时它会发送一条消息,DetailViewController必须听。

所以我无法在ViewDidDisappear方法中处理它。但另一种选择是在ViewDidUnload中。但是这种方法只在MemoryWarnings中调用。所以它没有处理令牌。那不好。

2)另一个问题是:对于我打开的每个DetailsViewcontroller,我必须在Settings中保存当前id是什么。然后当我离开时,我必须从“设置”中删除它。所以同样的问题在这里。如果我在ViewDidDisappear中删除它,它将删除当我在EditViewController,我不能,它必须在那里设置。但是,如果我仅在ViewDidUnload中删除它,则不会被调用,并且必须删除此变量。

我应该何时将OnDestroy方法调用到两种情况?

在Android中我正在调用OnDestroy。我应该在iOS中将它称为何处?

谢谢你,

1 个答案:

答案 0 :(得分:4)

ViewDidUnload不是一个选项 - 它已被弃用,不会被调用(很久以前 - 例如可能是iOS5以后?)。

当ViewController“不再使用”时,iOS并没有提供一般的ViewController覆盖。但是,如果您可以控制应用中的ViewControllers,例如如果你使用的是一个从不在popped之后重复使用ViewControllers的NavigationController,那么提供你自己的“清理”方法并从你自己的导航控制逻辑中调用它应该是相对简单的 - 例如来自使用NavigationController生成的事件的自定义演示者。