Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 停止来自另一个类的声音_Iphone_Ios_Multithreading_Audio - Fatal编程技术网

Iphone 停止来自另一个类的声音

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

我在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] 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