Ios AVPlayer键值的当前项是否可见?
我使用了一个AvQueuePlayer在后台播放音频。为了保持AvQueuePlayer的播放列表不为空,我使用键值观察来监视AvQueuePlayer的当前项,以便准备加载下一个播放项。有时效果很好,但有时失败了 以下是我收到的坠机报告:Ios AVPlayer键值的当前项是否可见?,ios,background,key-value-observing,avplayer,currentitem,Ios,Background,Key Value Observing,Avplayer,Currentitem,我使用了一个AvQueuePlayer在后台播放音频。为了保持AvQueuePlayer的播放列表不为空,我使用键值观察来监视AvQueuePlayer的当前项,以便准备加载下一个播放项。有时效果很好,但有时失败了 以下是我收到的坠机报告: Date/Time: 2011-12-16 23:43:58.963 +0800 OS Version: iPhone OS 4.3.5 (8L1) Report Version: 104 Exception Type: EXC_
Date/Time: 2011-12-16 23:43:58.963 +0800
OS Version: iPhone OS 4.3.5 (8L1)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x4f2ecfe8
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x32f0aca4 objc_msgSend + 28
1 Foundation 0x3165386c NSKVONotify + 24
2 Foundation 0x31651bb0 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:] + 220
3 Foundation 0x315fa7ea NSKeyValueNotifyObserver + 210
4 Foundation 0x315fa492 NSKeyValueDidChange + 230
5 Foundation 0x315e666a - [NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] + 70
6 AVFoundation 0x33f190f2 -[AVPlayerItem didChangeValueForKey:] + 26
7 AVFoundation 0x33f1ceba __avplayeritem_fpItemNotificationCallback_block_invoke_1 + 2310
8 libdispatch.dylib 0x338da8e0 _dispatch_call_block_and_release + 4
9 libdispatch.dylib 0x338d61ee _dispatch_main_queue_callback_4CF$VARIANT$up + 306
10 CoreFoundation 0x34c1d934 __CFRunLoopRun + 1328
11 CoreFoundation 0x34badebc CFRunLoopRunSpecific + 224
12 CoreFoundation 0x34baddc4 CFRunLoopRunInMode + 52
13 GraphicsServices 0x33e5e418 GSEventRunModal + 108
14 GraphicsServices 0x33e5e4c4 GSEventRun + 56
15 UIKit 0x31272d62 -[UIApplication _run] + 398
16 UIKit 0x31270800 UIApplicationMain + 664
17 WeatherTunes 0x0004b31e main (main.m:17)
18 WeatherTunes 0x0004b2ac start + 32
以下是我如何使用关键值观察:
[_queuePlayer addObserver:self forKeyPath:@"currentItem" options:NSKeyValueObservingOptionNew context:nil];
[_queuePlayer addObserver:self forKeyPath:@"currentItem.status" options:NSKeyValueObservingOptionNew context:nil];
我查阅了AvPlayer的课堂参考资料。然后我发现有人说属性“status”可以被观察到,而它没有提到currentItem。但我发现有些人使用属性currentItem作为可观察项。我现在完全糊涂了。请帮帮我。我也遇到了同样的问题,我想知道AVQueuePlayer中的一首歌何时结束。我最终还是这样做了,看起来更安全
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(songFinishedWithNotification:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
我也有同样的问题,我想知道一个播放器里的一首歌什么时候结束。我最终还是这样做了,看起来更安全
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(songFinishedWithNotification:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];