2012-06-09 3 views
2

У меня есть подкласс AVAudioPlayer и в пределах этого подкласса У меня есть метод для остановки текущего игрока и (по причинам, я не буду объяснять), требующие audioPlayerDidFinishPlaying, как это вручную:переменных выпадает из области видимости

// Handles stopping the player and calling audioPlayerDidFinishPlaying 
- (void) stopPlayerForTimedRepeat { 

    // Stop the player 
    [self stop]; 

    // Manually call the audio player callback 
    EditPlayListViewController *playlistController = [[EditPlayListViewController alloc] init]; 
    [playlistController audioPlayerDidFinishPlaying:self successfully:YES]; 
    [playlistController release]; 

} 

Однако, когда я вызываю audioPlayerDidFinishPlaying вручную, все мои переменные в оригинале EditPlaylistViewController выпадают из сферы действия.

Как избежать этого, чтобы у меня все еще был доступ ко всем моим исходным переменным?

+0

Если вы остановите и освободите плеер. Естественно, ваши переменные выпадут из сферы действия. – skram

+0

Да, но они все еще выпадают из сферы действия, даже если я сто p игрока после вызова 'audioPlayerDidFinishPlaying' вручную. – ZeNewb

ответ

2

Я выяснил, как это сделать, без ручного вызова audioPlayerDidFinishPlaying, чтобы все переменные все еще были в пределах области видимости.

// Handles stopping the player and calling audioPlayerDidFinishPlaying 
- (void) stopPlayerForTimedRepeat { 

    // Fast forward the call to the end, which will also call audioPlayerDidFinishPlaying 
    [self setCurrentTime:[self duration]]; 

} 
0

Переменная сфера теряет, потому что вы создаете новый объект EditPlayListViewController *playlistController = [[EditPlayListViewController alloc] init]; в методе после его остановки.

Пожалуйста объявляю плеер в .h файл (как этот EditPlayListViewController *playlistController; и передать его в методе viewDidLoad (как playlistController = [[EditPlayListViewController alloc] init];.

и изменить способ, как это,

- (void) stopPlayerForTimedRepeat 
{ 
    // Stop the player 
    [self stop]; 

    // Manually call the audio player callback 
    [playlistController audioPlayerDidFinishPlaying:self successfully:YES]; 
    [playlistController release]; 

} 

Надежда, это будет работайте за вас, если нет, скажите мне.

Смежные вопросы