2014-02-26 3 views
1

master-detail 앱이 있습니다. MasterViewController에있는 tableView의 각 셀을 누르면 DetailViewController으로 이동하여 오디오 파일을 다운로드하고 재생할 수 있습니다. AVAudioPlayer 인스턴스를 단일 파일로 유지하는 데 문제가있어서 여러 셀의 여러 파일이 동시에 재생되지 않았습니다. 이를 수정하기 전에 내 remoteControlReceivedWithEvent이 정상적으로 작동하고 모든보기 컨트롤러에서 이벤트를 관리 할 수있었습니다.remoteControlReceivedWithEvent의 값이 없습니다.

플레이어가 동시에 한 파일 만 재생하므로 MasterViewController으로 다시 이동 한 다음 다른 행을 선택하고 다른 셀을 입력하고 재생을 시작하면 처음 재생이 중지됩니다 파일을 만들고 두 번째 파일을 시작하십시오. 그러나 현재 사용자가 DetailViewController, remoteControlReceivedWithEvent 중 하나가 호출 된 곳에서 제어 센터를 사용하려고 시도하지만 값이 nil이므로 아무 일도 일어나지 않습니다. 나는 인덱스에 대한 액세스 권한이없는 때문에

if (entry.audioManager && [entry.audioManager soundPlayer].isPlaying) 
{ 
    equalizer.hidden = NO; 
    [self animateTheEqualizer]; 
} 

그러나 나는 remoteControlReceivedWithEvent에 그 자리 수 없습니다 : 지금 내 cellForRowAtIndexPath:에서 재생되는 열 감지하고 다음과 같이 MasterViewController에 그것을 강조 할 수있는 동안이다 .

나는 이미 canBecomeFirstResponder 등을 포함 시켰으며, 어떤 파일이 현재 재생되고 있는지 이해하는 것은 단지 table view의 혼란 일뿐입니다. DetailViewController에서이 작업을 시도해도 다른 VC 또는 백그라운드의 외부에서는 작동하지 않더라도 모든 것이 잘 작동합니다. 내 AudioManager 클래스

- (void)remoteControlReceivedWithEvent:(UIEvent *)event { 
    //if it is a remote control event handle it correctly 
    if (event.type == UIEventTypeRemoteControl) 
    { 
     if (event.subtype == UIEventSubtypeRemoteControlPlay) 
     { 
      [entry.audioManager playAudio]; 
//   [[NIKDetailViewController sharedController].feedEntry.audioManager playAudio]; 

     } 
     else if (event.subtype == UIEventSubtypeRemoteControlPause) 
     { 
      [entry.audioManager pauseAudio]; 
     } 
     else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) 
     { 
      [entry.audioManager togglePlayPause]; 
     } 
     else if (event.subtype == UIEventSubtypeRemoteControlBeginSeekingBackward) 
     { 
      [entry.audioManager rewindTheAudio]; 
     } 
     else if (event.subtype == UIEventSubtypeRemoteControlBeginSeekingForward) 
     { 
      [entry.audioManager fastForwardTheAudio]; 
     } 
    } 
} 

및 :

- (void)playAudio 
{ 
    //Play the audio and set the button to represent the audio is playing 
    if ([soundPlayer isPlaying]) 
    { 
     [soundPlayer pause]; 
     [self deleteTimer]; 
    } 
    else 
    { 
     [self createTimer]; 
     [soundPlayer play]; 
    } 

    [self refreshButton]; 
// [[NIKMasterViewController sharedController] markEntryAsPlaying:detailViewController.feedEntry]; 
} 

- (void)pauseAudio 
{ 
    //Pause the audio and set the button to represent the audio is paused 
    [soundPlayer pause]; 
    [self deleteTimer]; 
    [self refreshButton]; 
} 

내가 수동으로 markAsNowPlaying하거나 오른쪽 인덱스를 파악하고 nil을 받고 방지하기 위해 내가 사용할 수있는 대리자 메서드가 존재 하는가?

+0

친애하는 @downvoter, 시간을내어 화살표 버튼을 누른 후 downvote에 대한 이유를 설명하십시오. – Neeku

답변

1

좋아 ... 문제가 마침내 해결되었습니다! 그것은 내가 할 필요가있는 완전히 다른 무엇인가였습니다. 그냥 잘못된 객체 entry.audioManager을 사용하고 있습니다. 나는 AudioManager 클래스에서 선언 된 externcurrentAudioManager을 사용하기로되어있었습니다. 그러면 현재 재생되는 파일이 유지되고 아무 것도되지 않습니다.