在模拟器中,我在设置SKSpriteNode时在我的iOS应用程序中获得了EXC_BAD_ACCESS。它发生在我使用新值将循环中的SKSpriteNode设置为10次后,并使用addChild()将节点添加到视图中。当我清除所有孩子的视图(self.removeAllChildren)并想再次设置SKSpriteNode时,应用程序崩溃(仅在模拟器中)。
以下是代码:
func drawCards(hand:[String], trick:[String]) {
self.removeAllChildren()
if (hand.count > 0) {
for index in 0...(hand.count-1) {
var xPosition = size.width
let relativePosition = CGFloat(CGFloat(-hand.count) / 2.0 + CGFloat(index)) * 0.05
xPosition *= ( 0.525 + relativePosition)
var yPosition = size.height
yPosition *= 3 * (cos(relativePosition * 0.5) - 1) + 0.05
let card = SKSpriteNode(imageNamed: hand[index]) // This is where the app crashes after the loop is called the second time
card.position = CGPoint(x: xPosition, y: yPosition)
card.zRotation = -20 * CGFloat.pi / 180 * relativePosition
card.scale(to: CGSize(width: 125, height: 182))
card.zPosition = CGFloat(index)
card.name = hand[index]
addChild(card)
}
}
}
我拥有所有尺寸(1x,2x,3x)的资产目录中的所有图像。这是我在进入指定的代码行时得到的结果:
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { Thread 1: EXC_BAD_ACCESS (code=2, address=0x10f3a9368)
问题只出现在模拟器中,并且只是因为我切换到了xCode9 / swift 4.0。
当我单步执行代码时,看起来removeAllChildren不会清除屏幕。这是一种异步方法吗?我可以等待它完成吗?