Xcode在视图控制器之间传递数据?

时间:2012-11-27 22:30:23

标签: objective-c xcode avaudioplayer

  

可能重复:
  Passing Data between View Controllers

我对Xcode有一个奇怪的问题,我只是无法理解。

@interface MenuViewController : UIViewController{
    AVAudioPlayer *audioPlayer;
}

这是我在一个视图和另一个视图中实现的东西,我尝试使用该音频播放器并且它不起作用。是的,我已在其他视图中导入了此视图控制器。谁能帮忙。

2 个答案:

答案 0 :(得分:0)

您应该使用属性而不是实例变量才能从其他类访问AVAudioPlayer

@interface MenuViewController : UIViewController {
}

@property (retain) AVAudioPlayer* audioPlayer;

在另一个View Controller中,您可以使用

获取audioPlayer
[myMenuViewController audioPlayer]

答案 1 :(得分:0)

这是OOP的一项功能。根据您的要求,您需要执行以下两项操作之一。要么在两个地方实例化对象,要么在一个地方实例化它并将其传递给另一个地方。如果你想传递它,你可以使用NSNotification之类的东西。在将要使用共享audioPlayer的类中,您可以执行以下操作:

- (id)init
{
  self = [super init];
  if (self) {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(incomingAudioPlayer:)
                                                 name:@"ShareAudioPlayer" 
                                               object:nil];
  }
  return self;
}

- (void)incomingAudioPlayer:(NSNotification *)notification {
  // do stuff here
}

在实例化audioPlayer的类中(就在实例化之后),你可以这样做:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ShareAudioPlayer" 
                                                            object:self
                                                          userInfo:audioPlayer];

实际上你可能需要使用userInfo并在NSDictionary中粘贴audioPlayer,但这应该让你更接近。这是我通常使用的方法,可能还有其他方法。