我有一堆UIViewController
的子类。每个修改一个NSManagedObject
模型。他们中的许多人还展示了他们自己的模态视图控制器。UINavigationController - 在弹出视图控制器之前运行代码
当用户'弹出'视图控制器或推动下一个视图控制器时,我需要保存更改到NSManagedObjectContext
。
目前,我隐藏了默认后退按钮,并设置了我自己的UIBarButtonItem
,其中target
为self
和自定义action
。
这工作正常,但理想情况下,我想使用默认后退按钮并在弹出之前运行代码。有没有一种方法可以在弹出之前运行我自己的代码?
(我宁愿不把代码放入viewWillDisappear
,因为持久化到磁盘可能很昂贵,而且这种方法也可以通过视图控制器显示的模态来触发。)可以这样做吗?
所以你是说'self.navigationController'设置为'nil'之前调用'viewDidDisappear'(如果发生弹出)?尽管...可以安全地假设在未来的iOS版本中,这仍然是真的吗?这是由Apple记录的吗? –
我不知道它是否有记录,但行为已经很长时间了。您可以检查两个案例,以确保安全:'self.navigationController == nil || self不在self.navigationController.viewControllers' – tom
那么,Apple文档暗示至少:'这种方法从堆栈中删除顶部视图控制器,并使堆栈的新顶部成为活动视图控制器。如果堆栈顶部的视图控制器是根视图控制器,则此方法不执行任何操作。换句话说,你不能弹出堆栈中的最后一个项目。' –