我在我的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()
}
}
在应用启动之前崩溃,我只能看到以下内容:
我的配置是xCode6-Beta6,带有iOS8-Beta5和OSX 10.9.4的iPad Mini Retina。我还复制了模拟器中的错误;与xCode6-Beta5; 并在touchesBegan
方法中移动代码
取消注释该行sprite.removeFromParent()
会使错误消失。
重要说明:自iOS 8.1以来,此错误已得到纠正,请务必进行更新并确保您的应用程序不适用于iOS 8.0及更高版本。
我发现发生了什么……应该是某个苹果公司的员工犯了一个错误。说明:
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中一样检查代码是否相等。但是由于它是Swift,因此您应该===
检查对象是否相等而不是==
,这是一个愚蠢的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句