DOUAudioStreamer icon indicating copy to clipboard operation
DOUAudioStreamer copied to clipboard

KVO那老提示错误

Open zhaoxuezhi888 opened this issue 10 years ago • 3 comments

您好: 感谢您的开源代码,但是我用的过程中,如果下一首,上一首点的快,就会发现日志控制台经常会报一个错误,然后崩溃了: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x2ada1a0 of class DOUAudioStreamer was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x2ae9830> ( <NSKeyValueObservance 0x82562e0: Observer: 0x2aaee70, Key path: status, Options: <New: YES, Old: NO, Prior: NO> Context: 0x8f243c, Property: 0x82562c0> <NSKeyValueObservance 0x2ae98a0: Observer: 0x2aaee70, Key path: duration, Options: <New: YES, Old: NO, Prior: NO> Context: 0x8f2440, Property: 0x2ae9810> )'

然后代码错误定位到了DOUAudioEventLoop.m的- (void)_eventLoop方法中, case DOUAudioStreamerError: if (![self _handleEvent:[self _waitForEvent] 错误定位到了if这一行,然后就崩溃了

我是播放的远程音乐,同时PlayerViewController.h做成了单例模式。 代码参考的你们的demo,在_cancelStreamer方法里,我也移除了观察 [_streamer removeObserver:self forKeyPath:@"status"]; [_streamer removeObserver:self forKeyPath:@"duration"];

_resetStreamer方法里,我也加上了观察 [_streamer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:kStatusKVOKey]; [_streamer addObserver:self forKeyPath:@"duration" options:NSKeyValueObservingOptionNew context:kDurationKVOKey];

代码看起来没什么错误,但不知道为什么会报错,会和我PlayerViewController.h做成单例有关,还是和我读取网络音乐有关呢?如果点上下一首很慢,貌似没什么问题,点的快就出问题了,但是看代码,每次下一首应该都removeobserver了啊,所以百思不得其解,往解答,谢谢

zhaoxuezhi888 avatar Jun 22 '15 11:06 zhaoxuezhi888

cocoapod里面的doustreamer版本一年没更新了,难道这个开源组件将逐渐没人维护了?

WillHu avatar Jun 22 '15 11:06 WillHu

Exactly the same.

jaybowang avatar Apr 29 '16 08:04 jaybowang

注意看 _cancelStreamer 函数,必须在退出时将 streamer 对象置空,新的一首歌播放前再生成新的对象

johnlui avatar Jul 01 '16 06:07 johnlui