KVO時にiOS11AVPlayerがクラッシュする

VanTrickster

AVPlayer使用してリモートビデオを再生すると、奇妙なクラッシュが発生しました。Fabricのクラッシュログから、システムスレッド(com.apple.avfoundation.playerlayer.configuration)でアプリがクラッシュしますクラッシュログは以下のとおりです。

Crashed: com.apple.avfoundation.playerlayer.configuration
0  libsystem_kernel.dylib         0x1839ac2e8 __pthread_kill + 8
1  libsystem_pthread.dylib        0x183ac12f8 pthread_kill$VARIANT$mp + 396
2  libsystem_c.dylib              0x18391afbc abort + 140
3  libsystem_malloc.dylib         0x1839e3ce4 szone_size + 634
4  QuartzCore                     0x187ed75e8 -[CALayer dealloc] + 72
5  QuartzCore                     0x187e75d90 CA::Transaction::commit() + 1052
6  AVFoundation                   0x18973b4a8 -[AVPlayerLayer observeValueForKeyPath:ofObject:change:context:] + 684
7  Foundation                     0x1847a2894 NSKeyValueNotifyObserver + 304
8  Foundation                     0x1847bc364 -[NSObject(NSKeyValueObserverRegistration) _addObserver:forProperty:options:context:] + 204
9  Foundation                     0x1847bc13c -[NSObject(NSKeyValueObserverRegistration) addObserver:forKeyPath:options:context:] + 124
10 AVFoundation                   0x189760714 -[AVPlayer addObserver:forKeyPath:options:context:] + 204
11 AVFoundation                   0x189890414 -[AVKVODispatcher startObservingValueAtKeyPath:ofObject:options:usingBlock:] + 136
12 AVFoundation                   0x18989189c -[AVKVODispatcher(LegacyCallbackMethod) startObservingObject:weakObserver:forKeyPath:options:context:] + 152
13 AVFoundation                   0x18973aef4 -[AVPlayerLayer _startObservingPlayer:] + 328
14 libdispatch.dylib              0x183816a54 _dispatch_call_block_and_release + 24
15 libdispatch.dylib              0x183816a14 _dispatch_client_callout + 16
16 libdispatch.dylib              0x18382096c _dispatch_queue_serial_drain$VARIANT$mp + 528
17 libdispatch.dylib              0x1838212fc _dispatch_queue_invoke$VARIANT$mp + 340
18 libdispatch.dylib              0x183821d20 _dispatch_root_queue_drain_deferred_wlh$VARIANT$mp + 404
19 libdispatch.dylib              0x18382a03c _dispatch_workloop_worker_thread$VARIANT$mp + 644
20 libsystem_pthread.dylib        0x183abef1c _pthread_wqthread + 932
21 libsystem_pthread.dylib        0x183abeb6c start_wqthread + 4

注意:すべてのクラッシュはiOS11で発生しました

このクラッシュが発生した理由を誰かが知っていますか?

プラナフカセット

あなたのスタックトレースから、それAVPlayerLayer observeValueForKeyPath:ofObject:change:context:があなたの問題の原因であるように思われることに気づきましたしたがって、KVOを実装している必要があると思いますAVPlayer

その場合、2つの点に注意してください。

  1. 新しいKey-Value-ObservingiOS 11 APIを使用すると要件緩和されますが、監視から登録解除する必要がないというこれらの要件は、次の条件でのみ適用されます。

登録解除要件を遵守する緩和されたKey-Value

•オブジェクトは、-willおよび-didChangeValueForKey:を手動で呼び出すのではなく、KVO自動通知を使用している必要があります(つまり、+ automaticallyNotizesObserversForKey:からNOを返さないようにする必要があります)。

•オブジェクトは、内部KVO状態の(プライベート)アクセサーをオーバーライドしてはなりません。

これが古いAPIメソッドを使用して新しいAPIに実装されていることを確認するには、ここ参照てくださいドキュメントはまだ古いKVO実装に基づいているため、新しいAPIにはまだあまり役立ちません。ただし、ご覧のとおり、登録解除はで自動的に行われます。addObserverremoveObserverdeinit

AVFoundationAVPlayerKVOサポート(プライベートフレームワーク)の実装を非表示にしますが、これらの緩和された要件はに適用されない可能性がありますAVPlayer2018年のAppleからのこのコードスニペットはAVPlayer、新しいKVO APIで使用しますが、deinitメソッドでAVPlayer登録を解除します(新しいAPIの緩和された登録解除要件を満たしいない疑いを確認します)。

もう1つの説明は、登録解除はで発生しますがdeinit、必ずしもメインスレッドで実行されるとは限らないということです。これはAVPlayerKVOにとって重要です

  1. これが重要である理由は、ドキュメントから見つけることができます

一般的な状態の観察:メインスレッドでKVO変更通知を登録および登録解除する必要があります。これにより、別のスレッドで変更が行われた場合に部分的な通知を受け取る可能性が回避されます。

要約するAVPlayerと、新しいAPIを使用してKVO for実装する場合は、完了時明示的に登録を解除する必要があります。また、登録コードと登録解除コードを、DispatchQueue.main.async { }または同様のバリアント内にラップします

ここでは、キーパスが有効であると想定しています(動的プロパティであることを確認してください)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

起動時にiOSアプリがクラッシュする

分類Dev

起動時にiOSアプリがクラッシュする

分類Dev

起動時にiOSアプリがクラッシュする

分類Dev

iOSシミュレータが起動時にクラッシュする

分類Dev

KVOの登録解除中にクラッシュする

分類Dev

ログイン時にX11がクラッシュする(Arch ARM)

分類Dev

NSInvalidUnarchiveOperationExceptionが原因でiOS11 WKWebviewがクラッシュする

分類Dev

iOS9.2.1アプリが起動時にクラッシュする

分類Dev

iOS:MFMailComposerViewControllerの提示時にクラッシュする

分類Dev

起動時にiOS13でiosアプリがクラッシュする理由を特定する方法

分類Dev

PythonMatplotlibがプロット時にクラッシュする

分類Dev

スクロール時にRecyclerViewがクラッシュする

分類Dev

Xamarin.iOSアプリがiOS13の起動時にクラッシュする

分類Dev

Xamarin.iOSアプリがiOS13の起動時にクラッシュする

分類Dev

アプリの終了中にPushKitがプッシュを受信するとIOS11アプリケーションがクラッシュする

分類Dev

オブザーバーを追加すると AVPlayer がクラッシュする

分類Dev

iOSアプリケーションが起動時にクラッシュする

分類Dev

起動時にGoogleChromeStableがクラッシュする

分類Dev

起動時にSublimeText2がクラッシュする

分類Dev

接続時にSmack XMPP androidがクラッシュする

分類Dev

Postgresの検索時にGolang Panicがクラッシュする

分類Dev

ズーム時にiPhone / iPadがクラッシュする

分類Dev

C ++-実行時にstd :: threadがクラッシュする

分類Dev

PreferenceFragmentCompatが初期化時にクラッシュする

分類Dev

Xcodeが起動時にクラッシュする

分類Dev

送信時にjqueryフォームがクラッシュする

分類Dev

起動時にAndroidStudio forMacがクラッシュする

分類Dev

Visual Studio2013が起動時にクラッシュする

分類Dev

ロード時にPowershellISEがクラッシュする

Related 関連記事

  1. 1

    起動時にiOSアプリがクラッシュする

  2. 2

    起動時にiOSアプリがクラッシュする

  3. 3

    起動時にiOSアプリがクラッシュする

  4. 4

    iOSシミュレータが起動時にクラッシュする

  5. 5

    KVOの登録解除中にクラッシュする

  6. 6

    ログイン時にX11がクラッシュする(Arch ARM)

  7. 7

    NSInvalidUnarchiveOperationExceptionが原因でiOS11 WKWebviewがクラッシュする

  8. 8

    iOS9.2.1アプリが起動時にクラッシュする

  9. 9

    iOS:MFMailComposerViewControllerの提示時にクラッシュする

  10. 10

    起動時にiOS13でiosアプリがクラッシュする理由を特定する方法

  11. 11

    PythonMatplotlibがプロット時にクラッシュする

  12. 12

    スクロール時にRecyclerViewがクラッシュする

  13. 13

    Xamarin.iOSアプリがiOS13の起動時にクラッシュする

  14. 14

    Xamarin.iOSアプリがiOS13の起動時にクラッシュする

  15. 15

    アプリの終了中にPushKitがプッシュを受信するとIOS11アプリケーションがクラッシュする

  16. 16

    オブザーバーを追加すると AVPlayer がクラッシュする

  17. 17

    iOSアプリケーションが起動時にクラッシュする

  18. 18

    起動時にGoogleChromeStableがクラッシュする

  19. 19

    起動時にSublimeText2がクラッシュする

  20. 20

    接続時にSmack XMPP androidがクラッシュする

  21. 21

    Postgresの検索時にGolang Panicがクラッシュする

  22. 22

    ズーム時にiPhone / iPadがクラッシュする

  23. 23

    C ++-実行時にstd :: threadがクラッシュする

  24. 24

    PreferenceFragmentCompatが初期化時にクラッシュする

  25. 25

    Xcodeが起動時にクラッシュする

  26. 26

    送信時にjqueryフォームがクラッシュする

  27. 27

    起動時にAndroidStudio forMacがクラッシュする

  28. 28

    Visual Studio2013が起動時にクラッシュする

  29. 29

    ロード時にPowershellISEがクラッシュする

ホットタグ

アーカイブ