解雇或销毁所有视图控制器,操作表等?

时间:2010-11-03 19:44:25

标签: iphone uiviewcontroller uiactionsheet modalviewcontroller

我正在基于导航的应用中实现自定义网址方案,以允许用户从电子邮件中导入数据,因此我在我的应用代理中使用了此方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

如果在导入该方法中的数据之后,我可以使用popToRootViewController返回rootViewController以向用户显示新数据。

但是,如果用户在模态视图控制器或操作表启动时导入了数据(popToRootViewController不会忽略这些数据,并导致应用程序冻结),则无效。

除了rootViewController之外,有什么方法可以安全地解除/销毁所有视图控制器/操作表/警报视图?

或者也许某种方式从我的应用代表中告诉用户是否有操作表或模态视图控制器?

或者,我是否只是将它们留在原来的位置,并没有提供数据成功添加的即时指示?

1 个答案:

答案 0 :(得分:1)

你必须自己跟踪它们。一种简单的方法是每次显示模态时发布通知,并在userinfo字典中引用模态视图/工作表/警报。每当模态视图返回时,都会发布不同的通知。

观察您的应用委托中的通知(或者在有意义的情况下执行此操作,但应用委托是最简单的)。当您收到第一个时,将(弱)引用存储到模态视图,并在收到第二个时将参考归零。在两者之间,如果你的参考是非零的,你将能够通过解除模态视图来回复-application:handleOpenURL:

另请注意,在警报的情况下,最好在进入后台时将其关闭。在您再次被预先考虑之前,周可能会过去,当他们可能不再知道您所询问的内容时,用“您确定吗?确定/取消”来迎接用户是不好的风格。