应用程序关闭时出现奇怪的错误消息:“CALayer位置包含NaN:[nan nan]”

4

在我关闭物理设备上的应用程序时,出现了奇怪的错误消息。 我在模拟器中做同样的操作,没有发生这种情况。

我还尝试设置“事件触发”断点,但是XCode显示“无法在断点4.2的0x1b3a7edd0处设置断点站点:失败”。

有任何想法是什么引起了这个问题吗?

2021-04-08 20:40:15.985908+0200 GoMom[21503:2008470] [SwiftUI] Invalid frame dimension (negative or non-finite).
2021-04-08 20:40:15.986074+0200 GoMom[21503:2008470] [SwiftUI] Invalid frame dimension (negative or non-finite).
2021-04-08 20:40:15.990231+0200 GoMom[21503:2008470] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan nan]. Layer: <CALayer:0x2824151a0; position = CGPoint (2 8); bounds = CGRect (0 0; 595 4); delegate = <UIView: 0x114d07cc0; frame = (2 8; 595 4); anchorPoint = (0, 0); autoresizesSubviews = NO; layer = <CALayer: 0x2824151a0>>; opaque = YES; allowsGroupOpacity = YES; anchorPoint = CGPoint (0 0); _swiftUI_displayListID = 1469; backgroundColor = <CGColor 0x2800f2220> [<CGColorSpace 0x2800ed200> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 1 1 1 0.232 )>'
*** First throw call stack:
(0x19e95d86c 0x1b3976c50 0x19e8564a4 0x1a1d85db4 0x1a1d85ce4 0x1a55f5378 0x1a58f1e38 0x1a58efb78 0x1a58eea8c 0x1a56585f0 0x1a53b09d0 0x1a5658158 0x1a5657f0c 0x1a565793c 0x1a5657f2c 0x1a565793c 0x1a5657f2c 0x1a565793c 0x1a56576d0 0x1a5657580 0x1a57167f4 0x1a52ca0ac 0x1a5868434 0x1a585e2c8 0x1a59e8f90 0x1a59e8fc4 0x1a185fec4 0x1a1d7a644 0x1a1d7ab18 0x1a1d8f30c 0x1a1cd4640 0x1a1cffb08 0x1a1d00e98 0x19e8d8358 0x19e8d25c4 0x19e8d2b74 0x19e8d221c 0x1b649c784 0x1a1312ee8 0x1a131875c 0x1003c93ac 0x19e5926b0)
libc++abi.dylib: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan nan]. Layer: <CALayer:0x2824151a0; position = CGPoint (2 8); bounds = CGRect (0 0; 595 4); delegate = <UIView: 0x114d07cc0; frame = (2 8; 595 4); anchorPoint = (0, 0); autoresizesSubviews = NO; layer = <CALayer: 0x2824151a0>>; opaque = YES; allowsGroupOpacity = YES; anchorPoint = CGPoint (0 0); _swiftUI_displayListID = 1469; backgroundColor = <CGColor 0x2800f2220> [<CGColorSpace 0x2800ed200> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 1 1 1 0.232 )>'
terminating with uncaught exception of type NSException
warning: failed to set breakpoint site at 0x1b3976c14 for breakpoint 2.1: error sending the breakpoint request
warning: failed to set breakpoint site at 0x1b3976c14 for breakpoint 3.1: error sending the breakpoint request
warning: failed to set breakpoint site at 0x1b3976c14 for breakpoint 4.1: error sending the breakpoint request
warning: failed to set breakpoint site at 0x1b3a7edd0 for breakpoint 4.2: error sending the breakpoint request
2个回答

6
有两种可能性。
首先,您正在错误的框架方法中使用 .infinity
.frame(width: .infinity, height: .infinity, alignment: .center)

这种方法需要一个有限的值。 你只能在其中一个max....参数中使用它。
 .frame(minWidth: 0, idealWidth: 100, maxWidth: .infinity, minHeight: 0, idealHeight: 100, maxHeight: .infinity, alignment: .center)

其次,您在一个导致负值的框架中进行了计算。

.frame(width: geo.size.width - 10, height: 100, alignment: .center)

- 10会使结果变成负数。

没有最小可复现示例,无法准确告诉你问题出在哪里,但这应该能让你接近答案。


1

正如@lorem Ipsum在其答案的结尾所说,如果没有更多信息,解决这种类型的错误是困难的。

我写这篇文章是为了帮助另一个遇到同样问题的人,经过20分钟的调试,我发现问题是我有3个无限数字...因此SwiftUI无法处理。

对于任何遇到此错误的人,请耐心调试并跟随断点以真正看到UI中断的位置,然后查找错误是否来自您为框架设置的数字或框架本身的错误初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接