问一个问题似乎很广泛,但修复错误非常麻烦和困难。
这是我从Crashlytics获得的WebThread崩溃日志。
Thread : Crashed: WebThread
0 libobjc.A.dylib 0x0000000193e97bd0 objc_msgSend + 16
1 UIKit 0x0000000187f65dd8 +[UIViewAnimationState popAnimationState] + 332
2 MediaPlayer 0x0000000185953358 -[MPVolumeSlider volumeController:volumeValueDidChange:] + 92
3 MediaPlayer 0x00000001859c5fc4 -[MPVolumeController updateVolumeValue] + 260
4 MediaPlayer 0x0000000185952cb0 -[MPVolumeSlider didMoveToSuperview] + 144
5 UIKit 0x0000000187f2c1dc -[UIView(Hierarchy) _postMovedFromSuperview:] + 484
6 UIKit 0x0000000187f37cbc -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1764
7 MediaPlayer 0x0000000185955f54 -[MPVolumeView _createSubviews] + 264
8 MediaPlayer 0x00000001859549d4 -[MPVolumeView _initWithStyle:] + 240
9 MediaPlayer 0x0000000185954a60 -[MPVolumeView initWithFrame:style:] + 88
10 WebCore 0x0000000191ba4684 -[WebMediaSessionHelper initWithCallback:] + 132
11 WebCore 0x0000000191ba3db8 WebCore::MediaSessionManageriOS::MediaSessionManageriOS() + 96
12 WebCore 0x0000000191ba3d28 WebCore::MediaSessionManager::sharedManager() + 56
13 WebCore 0x0000000191ba2890 WebCore::MediaSession::MediaSession(WebCore::MediaSessionClient&) + 44
14 WebCore 0x00000001916e8604 WebCore::HTMLMediaSession::create(WebCore::MediaSessionClient&) + 36
15 WebCore 0x00000001916d0fb0 WebCore::HTMLMediaElement::HTMLMediaElement(WebCore::QualifiedName const&, WebCore::Document&, bool) + 1100
16 WebCore 0x000000019170a2b4 WebCore::HTMLVideoElement::create(WebCore::QualifiedName const&, WebCore::Document&, bool) + 68
17 WebCore 0x00000001916bdd9c WebCore::videoConstructor(WebCore::QualifiedName const&, WebCore::Document&, WebCore::HTMLFormElement*, bool) + 92
我在开发过程中从未见过这种崩溃(如果能够使用断点和控制台日志捕获到,我会非常高兴),但它只在用户使用时出现。
只能通过Crashlytics报告。
可能的原因:
应用程序使用MagicalRecord并在启动时从服务器获取数据,使用多线程,当WebKit正在使用UIKit部分和锁定时,另一个主线程似乎访问它。 所以我尝试删除所有dispatch_sync并将其更改为dispatch_async,但在进行几个功能调用后崩溃再次发生。
我想知道的是,为什么WebCore正在运行,而我从未请求在UIWebView上使用MPVolumeController。
即使它们可以因为某些原因在后台运行,为什么会崩溃? 它经常发生,用户抱怨。
其他人有同样的问题吗?