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
을 받고 방지하기 위해 내가 사용할 수있는 대리자 메서드가 존재 하는가?
친애하는 @downvoter, 시간을내어 화살표 버튼을 누른 후 downvote에 대한 이유를 설명하십시오. – Neeku