Ошибка уведомления AVAudioPlayer - PullRequest
0 голосов
/ 02 октября 2011

Итак, я почти закончил с моим приложением, и я ударил стену и не могу обойти эту последнюю проблему.

У меня в основном есть 2 вида.Главная страница и игровой экран.

При первой игре игра работает нормально, но когда я покидаю главный экран и затем возвращаюсь к игровому экрану, все звуки дублируются и запускают playerItemDidReachEnd рано (потому что я предполагаю, что есть 2 случая этого, но это не может заставить игрока остановить это. Вот основной код, вызывающий это. Любая помощь будет иметь большое значение, спасибо. Я не уверен, что моя проблемая создаю несколько экземпляров View2 в View1 или я создаю несколько объектов проигрывателя в view2, дублируя уведомление. Я знаю, что в моем - (void) playerItemDidReachEnd: (NSNotification *) уведомлении много, ноон отлично работает при первой загрузке страницы, только когда я нажимаю «вернуться к view1» и затем возвращаюсь к View2, когда возникает проблема.

View1ViewController.h
----------------------
#import "(i know here are arrows here, but can't make them show)UIKit/UIKit.h>
#import "ApplicationViewController.h"

@interface MonsterSpellViewController : UIViewController {
}
-(IBAction)showView1;

View2ViewController.m
----------------------
-(IBAction)showView2{

    ApplicationViewController *view2 = [[ApplicationViewController alloc]initWithNibName:@"ApplicationViewController" bundle:nil];

    view2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:view2 animated:YES];

}



View2ViewController.h
------------------------
#import "(i know here are arrows here, but can't make them show)UIKit/UIKit.h>
#import "(i know here are arrows here, but can't make them show)AVFoundation/AVFoundation.h>

@class AVAudioPlayer;

@interface ApplicationViewController : UIViewController{

AVAudioPlayer *avPlayer;
}

View2ViewController.m
-------------------------
#import "View2ViewController.h"

@synthesize avPlayer;

-(AVAudioPlayer *)avPlayer {
    if(!avPlayer) avPlayer = [[AVAudioPlayer alloc]init];
    return avPlayer;
}

-(void) viewDidLoad
{

[[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(playerItemDidReachEnd:)
     name:AVPlayerItemDidPlayToEndTimeNotification
     object:avPlayer];
}

-(IBAction)playSoundTest
{
 NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/monster3.mp3", [[NSBundle mainBundle] resourcePath]]];

    self.avPlayer = [AVPlayer playerWithURL:url];

    [self.avPlayer play];
}

- (void)playerItemDidReachEnd:(NSNotification *)notification {
    //[player seekToTime:kCMTimeZero];
    if (playEscape == YES) {
        [self btnEscapeSound];
        playEscape = NO;
    }
    if ((startButton.hidden == NO) && (letterCount != -1) && (playFinal == YES))
    {
        [self btnFinalSound];
        playFinal = NO;
        playEscape = YES;
    }

    NSLog(@"Player Check accessed");
    if (letterCount == 3) {

        if (Winner == letterCount) {
            //moveNextSound = YES;
            if (intLoopCount < 104) 
            {
                if (intLoopCount<104) {


                    [self btnStartOver:intLoopCount];
                    playFinal = NO;
                    //intLoopCount++;
                }
                if (intLoopCount==104) {
                    startButton.hidden=NO;
                    playFinal = YES;

                }
            }
        }
    }

    if (letterCount == 4) {

        if (Winner == letterCount) {
            //moveNextSound = YES;
            if (intLoopCount < 105) 
            {
                [self btnStartOver:intLoopCount];
                //intLoopCount++;
                if (intLoopCount==105) {
                    startButton.hidden=NO;
                    playFinal = YES;
                }
            }
        }
    }





}
}

-(IBAction)goBack:(id)sender{


    [self dismissModalViewControllerAnimated:YES];

}

1 Ответ

0 голосов
/ 02 октября 2011

Попробуйте добавить [view2 release]; после [selfsentModalViewController: view2 animated: YES];

...