我正在尝试创建一个路径(CGMutablePath
)以用于SpriteKit(SKShapeNode
)中的形状节点。我正在运行我的代码,它停止并说EXC_BREAKPOINT
,好像编译器中没有断点时(没有断点时)。以下是我所拥有的屏幕截图。
如您所见,我在编译器中没有设置断点。它只是趋向于停在第31行。如果从头开始,日志中没有任何内容可以说明发生此崩溃的原因。
我习惯用Objective-C在日志中将main.m
和Thread 1: SIGABRT
停在NSException
中,但是这没有任何意义。有人可以解释怎么了吗?
编辑:这里有更多屏幕截图,以证明我没有设置断点。当我遇到异常时,它只会抛出一个断点。
最佳答案
之所以会发生这种异常,是因为arc4random()
返回UInt32
,而您要减去x
的值,这可能会导致一个负值,该值不能表示为无符号整数。
要解决此问题,您可能需要在减去之前将表达式强制转换为Int32:
var y = CGFloat(self.size.height / 3) + CGFloat((Int32)(arc4random() % 100) - 50)
关于上面的
CGFloat
值-您创建arc4random
并仅在此之后减去,因此不会遇到上述情况。因此,以下是不同的修复方法var y = CGFloat(self.size.height / 3) + CGFloat(arc4random() % 100) - 50
基本上,您必须确保在减去某些内容时没有不带符号的类型。
令人讨厌的事情是,每次
arc4random % something
返回大于50的值时,编译器都不会警告您,并且代码有时有时实际上可以工作,因此不会漂移到负值...考虑到您不应该使用
arc4random_uniform
的反馈和建议,最好的解决方案是使用arc4random % something
。arc4random_uniform(something)
将不会产生随机值的适当分布,而arc4random
会产生-this has already been discussed on SO before。最后一点:您可能应该选择101而不是100作为上限,因为
arc4random_uniform
和ojit_code都产生介于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/