此问题之前已被问过,但我能找到的答案来自2009年,并不适合我的问题。让我重申一下这个问题。
我有一个UINavigationController
产生并将许多不同的UIViewController
推入其堆栈。其中一个处理一些核心数据操作,当一个特定的VC从堆栈中弹出时需要保存。不要专注于核心数据部分,而是关注弹出。
如何挂钩UIViewController
将从堆栈中弹出?
UINavigationControllerDelegate
协议非常稀疏。viewWillDisappear
,但如果另一个视图被推送到堆栈,那么也会被调用,因此它不会提供正确的时刻。viewWillAppear
,但由于该调用没有引用需要执行此操作的VC检查,这是不能令人满意的,并会引入一种适得其反的依赖性(VC被几个NC使用)。这使我处于目前不满意的状态。有没有人有更好的解决方案来找到你的UIViewController从UINavigationController的堆栈弹出的那一刻?
干杯,
EP。
答案 0 :(得分:9)
viewWillDisappear
是适当的代表。如果要确定当前视图是弹出还是新视图,则需要在此方法中添加逻辑>推。这已在这里得到解答 - viewWillDisappear: Determine whether view controller is being popped or is showing a sub-view controller
答案 1 :(得分:0)
我相信我会朝这个方向走另一个方向,并试图从各个viewControllers而不是navigationController中捕获轮询。对于一个单独的viewController,获取弹出看起来像是被解除分配,并且这是完全可以连接的。
子类UIViewController,在其-dealloc
中实现您的通知。请务必致电[super dealloc]
。
然后让每个视图都将您的新自定义视图控制器子类推入导航控制器子类。他们可以在自己的viewDidUnload中执行任何操作,然后调用[super dealloc]
(在这种情况下super
是您的UIViewController子类)来触发通知。