gpt4 book ai didi

ios - SKNode.removeFromParent() EXC_BAD_ACCESS

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

我注意到我的 Swift 项目中有一个奇怪的行为,并以这种方式在一个空的 SpriteKit 项目中重现了它:

class GameScene: SKScene {
override func didMoveToView(view: SKView) {

let sprite = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite)
//sprite.removeFromParent()

let sprite2 = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite2)
sprite2.removeFromParent()
}
}

它在应用程序启动前崩溃,我能看到的是: Screenshot of xCode

我的配置是 xCode6-Beta6,配备 iOS8-Beta5 和 OSX 10.9.4 的 iPad Mini Retina。我还在模拟器中重现了这个错误;使用 xCode6-Beta5;并在 touchesBegan 方法中移动代码

取消注释行 sprite.removeFromParent() 使错误消失。

最佳答案

重要提示:自 iOS 8.1 以来,此错误已得到纠正,请务必更新并使您的应用无法用于 iOS 8.0 及更早版本。

我发现发生了什么...应该是某些 Apple 员工犯了错误。解释:

let sprite = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite)

let sprite2 = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite2)
sprite2.removeFromParent()

println( sprite == sprite2 ) // Returns "true"
// Then crash

如果你这样做了:

let sprite = SKSpriteNode(imageNamed:"Spaceship")
sprite.name = "1"
self.addChild(sprite)

let sprite2 = SKSpriteNode(imageNamed:"Spaceship")
sprite2.name = "2"
self.addChild(sprite2)
sprite2.removeFromParent()

println( sprite == sprite2 ) // Returns "false"
// Then all is right, no crash

我认为非常简单,当您调用 .removeFromParent() 时,Apple 的代码会使用 == 检查代码中的相等性,就像它们在 Objective-C< 中所做的那样/em>。但由于它是 Swift,您应该执行 === 来检查对象相等性 而不是 ==,所以愚蠢的错误。

恭喜你在 SpriteKit 代码中发现了一个错误,go fill a form at Apple :D

关于ios - SKNode.removeFromParent() EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25406872/

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