添加新的 NSView 时,AVAudioPlayer 播放停止

Posted

技术标签:

【中文标题】添加新的 NSView 时,AVAudioPlayer 播放停止【英文标题】:AVAudioPlayer playback stops when new NSView is added 【发布时间】:2016-12-05 13:35:33 【问题描述】:

我有 AVAudioPlayer 实例播放音乐。该实例位于我的主窗口主视图的控制器中 - 它不是很花哨,但它可以工作:

在.h

@interface ViewController () 
    AVAudioPlayer *music;

@end

在.m中

- (void)viewDidLoad

    [super viewDidLoad];

    music = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/music01.mp3", [[NSBundle mainBundle] resourcePath]]] error:nil];
    [music playAtTime:0]; // play from start
    [music prepareToPlay];


-(void)playMusic 
    if (music) 
        [music play];
    

到目前为止一切顺利。除非我向主视图添加一个视图(以编程方式,使用它自己的 NSViewController),音乐就会停止。突然。这是正常的吗?我做错了什么?

【问题讨论】:

不可能用给定的代码行来判断。 【参考方案1】:

我的直觉是,当该视图被添加到窗口时,您会以某种方式在您的 AVAudioPlayer 实例上调用 stop。有很多方法可以调试它,但是,我会在 stop 方法中放置一个符号断点(你可以在 SO 上阅读更多关于这种断点的信息),看看它是否被调用以及从哪里调用。另外,请检查您在添加新视图时是否没有再次调用viewDidLoad(由于您可能拥有的继承)

否则,添加视图不可能触发可能停止您的实例的系统问题。

【讨论】:

以上是关于添加新的 NSView 时,AVAudioPlayer 播放停止的主要内容,如果未能解决你的问题,请参考以下文章

特立独行的问题:在 NSView 上添加子视图时

添加子视图到 NSView 显示,但不能删除

将子视图添加到 NSView 以获得类似国际象棋的网格

将子视图添加到 NSView

无法关闭在 Interface Builder 中创建的 NSView 实例的剪辑

在 NSView 中添加边框和圆角矩形