2011-06-10 82 views
-1

我在classA中播放过声音,有没有人知道如何在classB中停止它?从另一个班级停止声音

我已经阅读了几篇文章,其中大多数只是提到了创建一个实例(即在.h中类A * a和a = [[Class A alloc] init])。这不会因为某些原因而起作用。

下面是一些代码: 在classA.m

path1 = [[NSBundle mainBundle] pathForResource:[@"songName" ofType:@"mp3"]; 

av1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path1] error:NULL]; 
[av1 play]; 

在classB.m,

一个= [[CLASSA的alloc] initWithNibName:无束:无];

[a.av1 stop]; 
+0

实际情况是,在A类中播放音频,然后在classB中播放另一个音频,所以我想先停止classA中的音频。 – xcoder 2011-06-11 13:27:34

回答

-1

,你在这里做什么,

a = [[classA alloc] initWithNibName:nil bundle:nil]; 
[a.av1 stop]; 

是错误的。您正在创建一个全新的对象,这个对象几乎不会播放任何音乐,并且会向其播放器发送stop消息。如果您想在其他课程中停止玩家,则必须存储其他课程的参考文献。如果你想保持独立,你可以看看通知。 This是来自Apple的权威指南。基本上,这将涉及将A注册为通知的观察者,然后当B准备好播放时,它将发布关于播放音乐的通知。当A收到该通知时应关闭其音乐。

所以在Ainit,自己注册为观察员,

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(turnOffMusic:) 
              name:@"BWillPlayMusicNotification" 
              object:nil]; 

,然后在B对象是准备播放音乐,发布通知,

[[NSNotificationCenter defaultCenter] postNotification:@"BWillPlayMusicNotification"]; 

这将导致在A的turnOffMusic被调用,这几乎可以做,

- (void)turnOffMusic:(NSNotification *)notification { 
    [self.av1 stop]; 
} 

记得当对象被释放停止听通知,

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

这种方法可以让你保持两类独立。

+0

非常感谢你!你很棒!! – xcoder 2011-06-11 20:01:39

+0

只是为了增加一些内容,我认为第二部分应该是[[NSNotificationCenter defaultCenter] postNotificationName:@“BWillPlayMusicNotification”object:nil]; – xcoder 2011-06-11 20:02:56

+0

@xcoder,这是做这件事的一种方式,但是你的主要问题是你不了解OOP的基本概念。你需要了解类和对象之间的区别。看看命名约定也不会伤害你。正确命名的类的示例:'ClassA'(注意大写C)和一个正确命名的对象:'objectA'。 – 2011-06-11 21:54:28

0

你知道如何阻止A班的声音吗?

只是做同样的事情,但在B类

+0

音频在classA中播放,所以只需调用[audioClassB stop]将不起作用... – xcoder 2011-06-11 13:24:42

+0

@xcoder,然后从B类的A类呼叫停止。 – 2011-06-11 16:06:24

+0

这正是我的问题=]它由于某些原因不起作用 – xcoder 2011-06-11 17:26:42