我如何在另一个班级中引用某些内容?

时间:2011-01-31 23:25:23

标签: iphone objective-c cocoa-touch

在fliteTTS.h中,它有:

AVAudioPlayer* audioPlayer;

在fliteTTS.m中它有:

[audioPlayer stop];
audioPlayer =  [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:tempFilePath] error:&err];
[audioPlayer setDelegate:self];
[audioPlayer play];

但是我想把最后一行audioPlayer播放到我的viewController类中。我将如何重新编写这一行来在那里工作?

2 个答案:

答案 0 :(得分:1)

不要返回对象。而是告诉fliteTTS对象播放。

向fliteTTS添加方法:

-(void)play {
  [audioPlayer play];
}

现在在视图控制器中实例化fliteTTS,然后调用

[myFliteTTSInstance play]

这样做可以让拥有音频播放器的班级在开始播放时进行其他设置和拆卸。我们的想法是将音频播放器与拥有它的对象进行排序,而不是直接从知道位置的人那里访问它。


或者,您可以创建一种方法直接返回音频播放器。

-(AVAudioPlayer*)audioPlayer {
  return audioPlayer;
}

然后从您的视图控制器中调用

[[myFliteTTSInstance audioPlayer] play];

但由于种种原因,这种情况更为脆弱。如果fliteTTS类拥有音频播放器的实例,它也应该能够为您控制它。如果可以,那就这样做吧。

答案 1 :(得分:0)

假设该类被称为fliteTTS,您可以在fliteTTS.h中定义一个“play”方法。

- (void)play;

然后在fliteTTS.m中实现它。

- (void)play {
    [audioPlayer play];
}

然后在您的视图控制器中,您可以调用...

fliteTTS *myFliteTTS = [[fliteTTS alloc] init];
[myFliteTTS play];
[myFliteTTS release];