Dep*_*o B 7 swift ios11 xcode9
我正在更新我的Xcode 9,Swift 4,iOS 11和iPhone X的应用程序.它似乎一直相对平滑,但每当我点击后退按钮我的应用程序崩溃.我可以毫无问题地前进3-4个屏幕但是第一个后退按钮总是会崩溃应用程序.它不需要模拟器作为iPhone X运行.
它似乎没有陷入我的代码堆栈跟踪,所以这在我看来视图控制器的重绘阶段,我正在弹出,但我不确定.
因为我做了很多自定义绘图,因为在UITableViews和UIViews周围有自定义阴影我在所有位置设置了断点,我将其除以一个变量,但没有任何东西被击中.所以它似乎不是我的代码用零进行计算.
*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [nan 0; nan 0]'
*** First throw call stack:
(
0 CoreFoundation 0x000000010af711cb __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010a8d3f41 objc_exception_throw + 48
2 CoreFoundation 0x000000010afe5b95 +[NSException raise:format:] + 197
3 QuartzCore 0x0000000109424424 _ZN2CA5Layer10set_boundsERKNS_4RectEb + 230
4 QuartzCore 0x0000000109414c29 -[CALayer setBounds:] + 251
5 UIKit 0x0000000107267439 __27-[_UILabelLayer setBounds:]_block_invoke + 80
6 UIKit 0x000000010726717b -[_UILabelLayer _setFrameOrBounds:settingAction:] + 23
7 UIKit 0x00000001072673d8 -[_UILabelLayer setBounds:] + 155
8 QuartzCore 0x000000010941537c -[CALayer setFrame:] + 630
9 UIKit 0x0000000107267319 __26-[_UILabelLayer setFrame:]_block_invoke + 80
10 UIKit 0x000000010726717b -[_UILabelLayer _setFrameOrBounds:settingAction:] + 23
11 UIKit 0x00000001072672b8 -[_UILabelLayer setFrame:] + 155
12 UIKit 0x0000000106c4cf1e -[UIView(Geometry) setFrame:] + 368
13 UIKit 0x0000000106e4ec40 -[UILabel setFrame:] + 141
14 UIKit 0x0000000106fff254 -[UIButton _layoutTitleView] + 248
15 UIKit 0x0000000106fff3cf -[UIButton layoutSubviews] + 250
16 UIKit 0x0000000106c6c551 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1331
17 QuartzCore 0x000000010941b4ba -[CALayer layoutSublayers] + 153
18 QuartzCore 0x000000010941f5a9 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401
19 QuartzCore 0x00000001093a81cd _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 365
20 QuartzCore 0x00000001093d3ae4 _ZN2CA11Transaction6commitEv + 500
21 UIKit 0x0000000106b97f4a _UIApplicationFlushRunLoopCATransactionIfTooLate + 167
22 UIKit 0x00000001074ef960 __handleEventQueueInternal + 6894
23 CoreFoundation 0x000000010af142b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
24 CoreFoundation 0x000000010afb3d31 __CFRunLoopDoSource0 + 81
25 CoreFoundation 0x000000010aef8c19 __CFRunLoopDoSources0 + 185
26 CoreFoundation 0x000000010aef81ff __CFRunLoopRun + 1279
27 CoreFoundation 0x000000010aef7a89 CFRunLoopRunSpecific + 409
28 GraphicsServices 0x00000001104e59c6 GSEventRunModal + 62
29 UIKit 0x0000000106b9dd30 UIApplicationMain + 159
30 My Customer's Application Name 0x000000010475f087 main + 55
31 libdyld.dylib 0x000000010cfedd81 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Run Code Online (Sandbox Code Playgroud)
Sta*_*ich 10
TL; DR:在我们的例子中,这个iOS 11/Xcode 9错误是由添加了自定义的代码引起UILabel的UINavigationItem.titleView.
这段代码是使用臭名昭着的调整技术来覆盖-[UINavigationItem setTitle:]选择器 - 随着调用原始setTitle:方法,我们的开发人员也设置了与UINavigationItem.titleView属性相同标题的自定义标签.当调用导航项时,问题就是setTitle:nil这样,因此将null UILabel添加到.titleView具有零矩形维度的情况,这导致UIKit崩溃.眼前的速战速决是停止设置.titleView,如果title:参数为零.长期解决方案是删除应用程序中的混合.
PS我打开了一个雷达,要求改进此错误的错误消息:
Xcode 9:请改进错误处理: - [UILabel setFrame:]和 - [CALayer setFrame:]如果给出格式错误的CGRect,则会抛出不友好的异常
| 归档时间: |
|
| 查看次数: |
3053 次 |
| 最近记录: |