我的UIViewController弹出时调用的方法?

时间:2011-05-11 15:47:18

标签: objective-c cocoa-touch uiviewcontroller uinavigationcontroller avaudioplayer

我有一个驻留在UINavController中的UIViewController。通过AVAudioPlayer播放音频的视图控制器。当它开始变形时,它会继续播放音频,即使在dealloc方法中我发布了音频播放器。我甚至尝试将audioplayer设置为在dealloc中释放之前停止/暂停,但它不起作用。

所以,

  1. 为什么在弹出UIViewController时没有调用dealloc?
  2. 在弹出控制器之前/之后,我应该使用什么方法来停止音频播放器。
  3. 编辑:我不认为我的视图控制器会被保留。这是我分配它并在导航控制器中推送时的代码:

    - (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];
    }
    

3 个答案:

答案 0 :(得分:3)

关于第(2)点你是否尝试过:

- (void)viewDidDisappear:(BOOL)animated
在你的视图控制器子类上

知道它什么时候“消失”?

答案 1 :(得分:0)

导航控制器确实释放了视图控制器,但由于你保留了它(将initwithnibname调用到toqueDetail中),并且它已自动释放,因此在运行循环完成之前不会释放dealloc。您必须要么不使用便利性初始化程序,要么明确清除自动释放池。

答案 2 :(得分:0)

您是否正在分配音频播放器代理,如果是,是否持有对VC的引用?实际存在问题的类的代码可能会帮助我们更快地解决这个问题。 O_O