项目中使用的MRProgressHUD在特定场景下,会不定时地异常退出:
Last Exception Backtrace:
0 CoreFoundation 0x223b7916 __exceptionPreprocess + 122
1 libobjc.A.dylib 0x21b52e12 objc_exception_throw + 34
2 CoreFoundation 0x223b785c +[NSException raise:format:] + 108
3 QuartzCore 0x24a124c6 -[CALayer _renderSublayersInContext:] + 418
4 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
5 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
6 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
7 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
8 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
9 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
10 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
11 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
12 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
13 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
14 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
15 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
16 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
17 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
18 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
19 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
20 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
21 QuartzCore 0x24a1247c -[CALayer _renderSublayersInContext:] + 344
22 QuartzCore 0x24a11156 -[CALayer renderInContext:] + 1002
23 XXXX 0x00a10f48 -[MRBlurView snapshot] (MRBlurView.m:185)
24 XXXX 0x00a10754 -[MRBlurView redraw] (MRBlurView.m:122)
25 libdispatch.dylib 0x21f2581e _dispatch_call_block_and_release + 6
26 libdispatch.dylib 0x21f3150a _dispatch_after_timer_callback$VARIANT$mp + 62
27 libdispatch.dylib 0x21f2580a _dispatch_client_callout + 18
28 libdispatch.dylib 0x21f3ddae _dispatch_source_latch_and_call + 2026
29 libdispatch.dylib 0x21f38d14 _dispatch_source_invoke$VARIANT$mp + 708
30 libdispatch.dylib 0x21f3373a _dispatch_main_queue_callback_4CF$VARIANT$mp + 390
31 CoreFoundation 0x22379b68 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4
32 CoreFoundation 0x22378062 __CFRunLoopRun + 1570
33 CoreFoundation 0x222c7224 CFRunLoopRunSpecific + 516
34 CoreFoundation 0x222c7010 CFRunLoopRunInMode + 104
35 GraphicsServices 0x238b7ac4 GSEventRunModal + 156
36 UIKit 0x2699b184 UIApplicationMain + 140
37 XXXX 0x001e6fb6 main (main.m:17)
38 libdyld.dylib 0x21f6f86e tlv_get_addr + 42
经排查,是因为在其截取底层视图截图时,出现问题。底层视图中某一view的frame设置不对,其rect包含inf,导致出现crash。
解决办法:
在项目中,底层包含一个uiscrollview, 设置断点,调用[scrollview recursiveDescription]查看视图层次结构,找到frame包含inf的视图,纠正该视图frame即可。