0

このフォーラムを含む複数のフォーラムを検索しましたが、問題の解決策が見つかりません。「IQTest」ビュー コントローラのロード時に再生するように設定されたサウンド ファイルがあります。正常に再生され、「IQTest」ビュー コントローラーでサウンドを停止できます。

IQTest.h

@interface IQTest : UIViewController
{
AVAudioPlayer *theAudio;
}
@property (nonatomic, strong) AVAudioPlayer *theAudio;
@end

IQTest.m

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"IQTestBackgroundMusic" ofType:@"mp3"];
AVAudioPlayer* soundTrack=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
soundTrack.numberOfLoops = -1;
self.theAudio = soundTrack;
[theAudio play];
}

ユーザーが「IQTestQuestionThree」のビュー コントローラーでボタンを押したときにサウンドの再生を停止したいのですが、サウンドを停止しようとすると、再生が続くか、アプリがクラッシュします。複数の方法を試しましたが、音を止める方法はまだ見つかりません。

IQTestQuestionThree.m

- (IBAction) question3Answer1
{
IQTest *IQTestAudio = [[IQTest alloc] init];
[IQTestAudio.theAudio stop];

iqScaryFace.hidden = NO;
homeButton.hidden = NO;
homeButtonLabel.hidden = NO;
answer1Button.hidden = YES;
answer2Button.hidden = YES;
answer3Button.hidden = YES;
answer4Button.hidden = YES;
}

私が得ることができる助けをありがとう。

4

1 に答える 1

1
- (IBAction) question3Answer1
{
    IQTest *IQTestAudio = [[IQTest alloc] init];
    [IQTestAudio.theAudio stop];

このコードは、まったく新しいIQTestオブジェクト (サブクラスであるため、紛らわしい名前が付いています) を作成し、そのメソッドUIViewControllerを呼び出します。stop

この真新しいIQTestオブジェクト (おそらく名前を変更しIQTestViewControllerますか?) は作成されたばかりで、サウンドの再生を開始したオブジェクトとは異なります。したがって、制御できない何かの再生を停止することを期待しています。(少なくとも、もっとコードを見ない限り、うまくいくとは思いません。)

「IQTestQuestionThree」のView Controllerでユーザーがボタンを押したときに音の再生を止めたい

ビュー階層はどのように構成されていますか?

IQTestQuestionThree親が であるビュー コントローラですかIQTest? (ここでも、 のIQTestQuestionThreeような名前に変更することを検討してIQTestQuestionThreeViewControllerください。) その場合、デリゲート パターンを使用して、IQTestQuestionThreeアラートIQTestでサウンドの再生を停止することができます。

ビュー コントローラーの階層がより複雑な場合、および/またはサウンドの再生を停止する可能性のある他のビュー コントローラーが他の場所にある場合は、サウンドを再生するためのプロキシとして機能するサウンド再生用のモデル クラスを作成し、そのモデルをインスタンス化することを検討してください。クラスをアプリ デリゲートに追加し、オーディオを制御する必要があるすべてのビュー コントローラーに渡します。

(UIViewController慣習により、サブクラスはViewController名前の接尾辞として " " を持ちます。これは、Apple のソース コードの場合に当てはまります。読みやすくするためにコードを書きたい場合は、どの言語の慣習に従う必要があります。できるだけ細かく書き直します。)

于 2012-06-01T19:53:45.613 に答える