当我的 UIViewController 被弹出时调用的方法?
Posted
技术标签:
【中文标题】当我的 UIViewController 被弹出时调用的方法?【英文标题】:Method called when my UIViewController gets popped? 【发布时间】:2011-05-11 15:47:17 【问题描述】:我有一个 UIViewController 驻留在 UINavController 中。通过 AVAudioPlayer 播放音频的视图控制器。当它弹出时,它会继续播放音频,即使在 dealloc 方法中我释放了音频播放器。我什至尝试将音频播放器设置为停止/暂停,然后在 dealloc 中释放它,但它不起作用。
所以,
-
为什么弹出 UIViewController 时不调用 dealloc?
在弹出控制器之前/之后,我应该使用什么方法来停止音频播放器。
编辑:我不认为我的视图控制器被保留在其他地方。这是我分配它并将其推送到导航控制器时的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSString *name = [tableData objectAtIndex:[indexPath row]];
ToquesDetailVC *toqueDetail = [[ToquesDetailVC alloc] initWithNibName:@"ToquesDetail"
audioPath:[[NSBundle mainBundle] pathForResource:name ofType:@"mp4"]
imageNamed:[[NSBundle mainBundle] pathForResource:name ofType:@"jpg"]];
[[self navigationController] pushViewController:toqueDetail animated:YES];
[toqueDetail release];
【问题讨论】:
你确定你的视图控制器(被弹出的那个)没有被保留在其他地方吗? 不,我很确定。我更新了我的问题代码。感谢您的回复。 【参考方案1】:关于第 (2) 点,您是否尝试过:
- (void)viewDidDisappear:(BOOL)animated
在您的视图控制器子类上知道它何时“消失”?
【讨论】:
如果您将另一个控制器推到它上面,它也会消失。如果可以,那么您不知道它是弹出还是下推。 没错,如果你说推送一个模态视图控制器;但应该可以在这样的事件之后检查音频(在这个问题中)是否仍然应该播放。我承认这不是一个理想的钩子,因为您有几种情况会导致视图消失。好点子。【参考方案2】:导航控制器确实释放了视图控制器,但由于您保留了它(使用 initwithnibname 调用 toqueDetail),并且它是自动释放的,因此在运行循环完成之前它不会被释放。您必须要么不使用便利初始化程序,要么明确清除自动释放池。
【讨论】:
【参考方案3】:您是否分配了音频播放器委托,如果是,是否持有对 VC 的引用?实际存在问题的类的代码可能会帮助我们更快地解决这个问题。 o_O
【讨论】:
以上是关于当我的 UIViewController 被弹出时调用的方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何从导航堆栈中推送/弹出uiviewcontroller时收到警报
如果从navigationController弹出时会释放ViewController?