Iphone 停止来自另一个类的声音
我在a班播放过一个声音,有人知道如何在B班停止吗 我已经读过好几篇文章了,其中大多数只是提到创建一个实例(例如.h中的Class A*A和A=[[Class A alloc]init]in.m)。由于某些原因,这是行不通的 以下是一些代码: A.m班Iphone 停止来自另一个类的声音,iphone,ios,multithreading,audio,Iphone,Ios,Multithreading,Audio,我在a班播放过一个声音,有人知道如何在B班停止吗 我已经读过好几篇文章了,其中大多数只是提到创建一个实例(例如.h中的Class A*A和A=[[Class A alloc]init]in.m)。由于某些原因,这是行不通的 以下是一些代码: A.m班 path1 = [[NSBundle mainBundle] pathForResource:[@"songName" ofType:@"mp3"]; av1 = [[AVAudioPlayer alloc] initWithContentsO
path1 = [[NSBundle mainBundle] pathForResource:[@"songName" ofType:@"mp3"];
av1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path1] error:NULL];
[av1 play];
在B.m类中
a=[[classA alloc]initWithNibName:nil bundle:nil]
[a.av1 stop];
你知道如何在A班停止声音吗
做同样的事情,但是在B班。你在这里做什么
a = [[classA alloc] initWithNibName:nil bundle:nil];
[a.av1 stop];
这是错误的。您正在创建一个全新的对象,它很可能没有播放任何音乐,并向其播放器发送停止
消息。如果要在另一个类中停止播放机,必须存储另一个类的assign
ed引用。如果希望保持它们的独立性,可以查看通知。是苹果公司的权威指南。基本上,这将涉及注册A作为通知的观察者,然后当B准备好播放时,它将发布即将播放音乐的通知。当收到该通知时,应关闭其音乐
因此,在A
的init
中,注册为观察员
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(turnOffMusic:)
name:@"BWillPlayMusicNotification"
object:nil];
然后当B对象准备好播放音乐时,发布通知
[[NSNotificationCenter defaultCenter] postNotification:@"BWillPlayMusicNotification"];
这将导致调用A的关闭音乐
,这将非常有用
- (void)turnOffMusic:(NSNotification *)notification {
[self.av1 stop];
}
请记住,在解除分配对象时停止侦听通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
这种方法允许您保持两个类的独立性。音频在classA中播放,因此简单地调用[audioClassB stop]是不起作用的……这正是我的问题=]它在某些情况下不起作用reasons@xcoder,然后发布一些代码,向我们展示您正在做什么,我们将看到我们可以做些什么来修复它。实际情况是,在类A中播放一个音频,然后在类B中播放另一个音频,因此我想先停止类A中的音频。为了添加一些内容,我认为第二部分应该是[[NSNotificationCenter defaultCenter]postNotificationName:@“BWillPlayMusicNotification”对象:nil]@xcoder,这是一种方法,但是你的主要问题是你不理解OOP的基本概念。您需要理解类和对象之间的区别。看看命名惯例也不会伤害你。正确命名的类的示例:
ClassA
(注意大写字母C),以及正确命名的对象:objectA
。