gpt4 book ai didi

ios - Swift 中奇怪的断点异常是怎么回事?

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:06 25 4
gpt4 key购买 nike

我正在尝试为 SpriteKit (SKShapeNode) 中的形状节点创建一个路径 (CGMutablePath)。我正在运行我的代码,它停止并显示 EXC_BREAKPOINT 就好像编译器中有一个断点,而实际上没有断点。以下是我所拥有内容的屏幕截图。

Screenshot

如您所见,我没有在编译器中设置断点。它只是倾向于在第 31 行停止什么都没有给出此次崩溃原因的日志(如果有的话)。

我习惯于 Objective-C 在 main.m 中停止,日志中有 Thread 1: SIGABRTNSException,但是这是没有意义的。有人可以解释一下哪里出了问题吗?

编辑:这里有更多截图来证明我没有设置断点。当我遇到异常时,它只是抛出一个断点。

Console log

UI

最佳答案

发生该异常是因为 arc4random() 返回 UInt32 并且您要减去它的值,这可能会导致负值,该值不能表示为无符号整数.

要解决此问题,您可能需要在减去之前将表达式转换为 Int32:

var y = CGFloat(self.size.height / 3) + CGFloat((Int32)(arc4random() % 100) - 50)

关于上面的 x 值 - 你创建 CGFloat 并且只在之后减去,因此不会遇到上面的情况。因此,以下是不同的修复方法

var y = CGFloat(self.size.height / 3) + CGFloat(arc4random() % 100) - 50

基本上,您必须确保在减去某些内容时不存在无符号类型。

令人恼火的是,编译器不会警告您,而且代码有时确实有效,每次当 arc4random 返回大于 50 的值时,因此不会漂移到负值。 .

结合您不应使用 arc4random % something 的反馈和建议,最好的解决方案是使用 arc4random_uniform

arc4random % something 不会产生随机值的正确分布,而 arc4random_uniform(something) 会 - this has already been discussed on SO before .

最后一点:您可能应该选择 101 而不是 100 作为上限,因为 arc4randomarc4random_uniform 都会产生介于 0 和 (upper-1) 之间的值,例如0 和 99。如果减去 50,您将得到介于 -50 和 +49 之间的值。选择 101 将产生 -50 到 +50 的所需范围。

var y = CGFloat(self.size.height / 3) + CGFloat(arc4random_uniform(101)) - 50

关于ios - Swift 中奇怪的断点异常是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com