2011-12-17 3 views
2

Я использовал AvQueuePlayer для воспроизведения аудио в фоновом режиме. И чтобы плейлист AvQueuePlayer не был пустым, я использовал наблюдение за ключевыми значениями, чтобы следить за текущим элементом AvQueuePlayer, чтобы подготовиться к загрузке следующего игрового элемента. Иногда он работает хорошо, но иногда он терпит неудачу.Является ли текущее значение ключа AVPlayer наблюдаемым?

Вот отчет о аварии я получил:

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. Затем я обнаружил, что было сказано, что свойство «статус» можно наблюдать, в то время как оно не упоминает currentItem. Но я обнаружил, что некоторые люди используют свойство currentItem как наблюдаемое. Теперь я совершенно смущен. Пожалуйста, помогите мне.

ответ

0

У меня была такая же проблема, мне хотелось узнать, когда закончилась песня в AVQueuePlayer. Вместо этого я сделал это, казалось, более безопасным.

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(songFinishedWithNotification:) 
              name:AVPlayerItemDidPlayToEndTimeNotification 
              object:nil]; 
Смежные вопросы