Objective c IpodMusicLayer playbackState在出现异常情况后不准确

Objective c IpodMusicLayer playbackState在出现异常情况后不准确,objective-c,audio,playback,ipod,mpmusicplayercontroller,Objective C,Audio,Playback,Ipod,Mpmusicplayercontroller,我有一个简单的音乐播放器应用程序,遇到了一个非常奇怪的问题。首先,在播放音乐和处于锁定状态时,我允许用户双击Home按钮并使用锁定的iPod音乐控件。但我注意到,在锁定状态下,我的应用程序不会收到任何已注册的通知。在大多数情况下,这是好的。但是,如果用户在锁定状态下播放音乐至少15分钟(我不知道为什么,但不会太长,而且这个问题不会发生),并且使用某种耳机或辅助插孔,然后在设备仍在播放音乐时拔下耳机/辅助插孔,iPodMusicPlayer将自动暂停。这正是我想要它做的,但在这之后,当用户解锁他们

我有一个简单的音乐播放器应用程序,遇到了一个非常奇怪的问题。首先,在播放音乐和处于锁定状态时,我允许用户双击Home按钮并使用锁定的iPod音乐控件。但我注意到,在锁定状态下,我的应用程序不会收到任何已注册的通知。在大多数情况下,这是好的。但是,如果用户在锁定状态下播放音乐至少15分钟(我不知道为什么,但不会太长,而且这个问题不会发生),并且使用某种耳机或辅助插孔,然后在设备仍在播放音乐时拔下耳机/辅助插孔,iPodMusicPlayer将自动暂停。这正是我想要它做的,但在这之后,当用户解锁他们的设备并再次聚焦到应用程序时,iPodMusicPlayer的playbackState是不准确的

- (IBAction)playPause:(id)sender {
     if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) {
         [musicPlayer pause];    
     } else {
         [musicPlayer play];
     }
 }
其中
musicPlayer=[mpmusicplayer控制器iPodMusicPlayer]


在正常情况下,这运行得非常好。但是在这些条件之后,我的断点将在音乐暂停时达到MPMusicLayBackstate播放的条件,反之亦然。我能解决这个问题的唯一方法是选择新的音乐,或者终止应用程序并重新打开。我已经尝试了大量的变通方法来以编程方式解决这个问题,但没有一个方法是100%无bug的。有人知道为什么会发生这种情况吗?

我遇到了完全相同的问题,事实上我找到了更多解决问题的方法,最有效的方法是将应用程序放在后台,并从ipod播放器中快速多次使用播放/暂停按钮。在50%的情况下,各州之间没有同步。我也尝试了很多变通方法,但是没有办法让我的应用程序正常工作。我认为iOS框架中有一个bug,因为文档没有任何改变


我找到了这个案例的解决方法,详细内容如下:

您也可以尝试这个解决方法:

 - (IBAction)playPause:(id)sender {
      if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) {
          [musicPlayer play];    
          [musicPlayer pause];    
      } else {
          [musicPlayer pause];
          [musicPlayer play];
      }
  }

我这边也有同样的问题。将play调用放在run循环的队列上似乎可以解决这个问题(至少在我的上下文中是这样)。您可以使用以下代码行进行尝试:

[musicPlayer performSelector:@selector(play) withObject:nil afterDelay:0];

这个问题在iOS 8中仍然存在。我尝试了@matbur建议的方法,它工作了一段时间,但在某个时候停止了工作。因此,我通过自己跟踪状态,绕过了整个问题:

- (void)viewDidLoad {
    self.isMusicPlaying = NO;
}

- (void)pauseAllSound {
    self.isMusicPlaying = NO;
    [self.musicController pause];
}

- (void)playAllSound {
    self.isMusicPlaying = YES;
    [self.musicController play];
}

谢谢你的建议,不幸的是,你的变通方法对我的问题没有帮助,但我仍在使用它,因为它确实对你的情况有所帮助。如果苹果曾经回复过你的bug报告,请转达他们的回复(或解决方案,如果有的话!)