我有一个主从应用程序。点击导航中的tableView
每个单元格,您可以下载和播放音频文件。我在保持实例单一时遇到了问题,因此来自多个单元的不同文件不会同时播放。在修复它之前,我的工作正常,我可以管理所有视图控制器上的事件。MasterViewController
DetailViewController
AVAudioPlayer
remoteControlReceivedWithEvent
现在解决这个问题,我的播放器同时只播放一个文件,所以如果我碰巧导航回MasterViewController
然后选择另一行并输入不同的单元格并开始播放,它将停止第一个文件并开始第二个文件. 但目前的问题是,当用户在其他地方时尝试使用控制中心,在 , 之外的地方DetailViewController
被remoteControlReceivedWithEvent
调用,但值为nil
,所以什么也没有发生。此时我可以检测到我现在正在播放哪一行,cellForRowAtIndexPath:
并在下面突出显示它MasterViewController
:
if (entry.audioManager && [entry.audioManager soundPlayer].isPlaying)
{
equalizer.hidden = NO;
[self animateTheEqualizer];
}
但是我无法发现这一点,remoteControlReceivedWithEvent
因为我无法访问索引。
我已经包含canBecomeFirstResponder
等等,我确信这只是table view
理解当前正在播放哪个文件的混乱。如果我在另一个 VC 中尝试这个DetailViewController
但不在它之外,甚至在后台尝试,一切都很好。
- (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];
}
}
}
在我的AudioManager
课堂上:
- (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
?