-1

重複の可能性:
View Controller 間でのデータの受け渡し

理解できないXcodeで奇妙な問題が発生しています。

@interface MenuViewController : UIViewController{
    AVAudioPlayer *audioPlayer;
}

これは私が 1 つのビューで実装したもので、別のビューではそのオーディオ プレーヤーを使用しようとしましたが、機能しませんでした。はい、このView Controllerを別のビューにインポートしました。誰でも助けることができます。

4

2 に答える 2

0

AVAudioPlayer他のクラスからアクセスできるようにするには、インスタンス変数の代わりにプロパティを使用する必要があります。

@interface MenuViewController : UIViewController {
}

@property (retain) AVAudioPlayer* audioPlayer;

audioPlayer他のView Controllerでは、使用して取得できます

[myMenuViewController audioPlayer]
于 2012-11-27T22:37:23.320 に答える
0

これは OOP の機能です。やりたいことに応じて、次の 2 つのいずれかを行う必要があります。オブジェクトを両方の場所でインスタンス化するか、1 つの場所でインスタンス化して別の場所に渡します。渡したい場合は、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 をいじったり、AudioPlayer を NSDictionary などに貼り付けたりする必要があるかもしれませんが、これでもっと近くなるはずです。これは私が通常使用する方法であり、他にもあるかもしれません。

于 2012-11-27T22:51:53.817 に答える