MPRemoteCommandCenter在iOS中多次调用处理程序

时间:2016-03-19 07:09:47

标签: ios iphone ios9 audio-player mpmusicplayercontroller

MPRemoteCommandCenter多次调用处理程序块,并导致对选择器方法的不必要调用。

以下是代码段:

MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];

[commandCenter.nextTrackCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent * _Nonnull event) {
    NSLog(@"NEXTTTTTT");
    return MPRemoteCommandHandlerStatusSuccess;
}];

[commandCenter.previousTrackCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent * _Nonnull event) {
    NSLog(@"PREVIOUSSS");
    return MPRemoteCommandHandlerStatusSuccess;
}];

当用户在屏幕被锁定时点击音乐播放器底座上的下一个或上一个按钮时,会多次调用上述块。

2 个答案:

答案 0 :(得分:10)

处理程序将在添加时被调用多次,即使它多次在同一对象上注册也是如此。也许您的代码段不止一次被调用。

答案 1 :(得分:8)

看起来你有多个你调用代码的对象实例,例如。如果你按每个轨道推送一个新的UIViewController。旧视图控制器可能仍然存在并再次调用处理程序。

尝试将代码放入

- (void)viewDidAppear:(BOOL)animated

然后像这样禁用它

- (void)viewWillDisappear:(BOOL)animated {
     MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];
    [commandCenter.nextTrackCommand removeTarget:self];
    [commandCenter.previousTrackCommand removeTarget:self];
}