2014-02-26 44 views
1

我有一個主 - 從應用程序。在MasterViewController中點擊tableView的每個單元導航到DetailViewController,您可以在其中下載並播放音頻文件。我在保持單個的AVAudioPlayer實例時遇到問題,因此來自多個單元的不同文件不會同時播放。解決之前,我的remoteControlReceivedWithEvent工作正常,我可以管理所有視圖控制器上的事件。無remoteControlReceivedWithEvent中的值

現在解決這個問題,我的播放器只能同時播放一個文件,所以如果我碰巧回到MasterViewController,然後選擇另一行並輸入另一個單元格並開始播放,它會停止第一個文件並開始第二個。但目前的問題是試圖使用控制中心,而用戶在其他地方撥出DetailViewController,remoteControlReceivedWithEvent,但值爲nil,所以沒有任何反應。這是我的同時能夠檢測該行現在在我cellForRowAtIndexPath:玩,並強調它的MasterViewController如下:

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

但是我不能當場在remoteControlReceivedWithEvent,因爲我沒有給指數的任何訪問。

我已經包含canBecomeFirstResponder等等,我相信這只是table view瞭解哪個文件正在播放的混淆。一切工作正常,如果我在DetailViewController嘗試這個,但在另一個VC或甚至在後臺不在外面。

- (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的委託方法?

+0

尊敬的@downvoter,請您按下該箭頭按鈕後花時間解釋您對downvote的理由。 – Neeku

回答

1

好的......問題終於解決了!這是完全不同的,我需要做的。我只是使用了錯誤的對象entry.audioManager。我應該使用currentAudioManager這是AudioManager類中聲明的extern。這將保持當前播放的文件,不會是零。