首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNotification不调用

NSNotification不调用
EN

Stack Overflow用户
提问于 2013-09-25 13:05:33
回答 1查看 489关注 0票数 0

问题是,我有三个NSNotificationcenter的设置来收听用户更改的歌曲、音量和播放列表。该应用程序可以正确地播放用户的歌曲,从播放列表中选择歌曲。

当用户选择要播放的歌曲时,它通常会注册用户播放歌曲的操作并更改playbackState,但有时它无法这样做。创造一个连续的循环,只允许游戏和游戏,而不是停止。(基本上,代码有一个间歇性错误。)

我认为问题在于,来自一个动作的NSNotificationcenter调用被另一个NSNotificationcenter调用覆盖。取消一个呼叫而不是另一个呼叫。这样,用户就无法停止播放歌曲。

App功能:允许用户从PickerView中选择播放列表,从播放列表中加载歌曲,允许用户从TableView中选择要播放的歌曲。

代码语言:javascript
复制
- (void)addMusicPlayerObserver {

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleNowPlayingSongStateChanged:)
                                                 name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
                                               object:self.musicPlayer];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handlePlaybackStateChanged:)
                                                 name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
                                               object:self.musicPlayer];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleVolumeChangedFromOutSideApp:)
                                                 name:MPMusicPlayerControllerVolumeDidChangeNotification
                                               object:self.musicPlayer];
    [self.musicPlayer beginGeneratingPlaybackNotifications];
}

- (void)removeMusicPlayerObserver {
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
                                                  object:self.musicPlayer];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
                                                  object:self.musicPlayer];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMusicPlayerControllerVolumeDidChangeNotification
                                                  object:self.musicPlayer];
    [self.musicPlayer endGeneratingPlaybackNotifications];
}

implentation+header的完整代码

http://pastebin.com/vL12zFrQ

任何帮助都会很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-25 13:43:43

您有两个处理程序:一个用于通知,一个用于按钮操作(看起来您在应用程序中创建了一个play/pause按钮)。

您应该从按钮处理程序中删除这一行,因为您的通知处理程序也做了同样的工作。

代码语言:javascript
复制
[self._playPauseButton setTitle:@"Play" forState:UIControlStateNormal];

我也建议你这么做

代码语言:javascript
复制
if (playbackState == MPMusicPlaybackStatePlaying) {
    [self.musicPlayer pause];
}
else {
    [self.musicPlayer play];
}

为了确保不会有任何州,你没有处理的障碍,你的方式。(通知处理程序也有相同的想法)

此外,@rckoenes的建议是好的,尝试处理每一个通知,而不仅仅是你的对象之一。

还尝试移除NSNotificationCenter的object参数中的NSNotificationCenter,然后检查它是否有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19005779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档