Ios SKNode.removeFromParent()EXC_BAD_访问

Ios SKNode.removeFromParent()EXC_BAD_访问,ios,swift,sprite-kit,xcode6-beta6,Ios,Swift,Sprite Kit,Xcode6 Beta6,我注意到我的Swift项目中有一个奇怪的行为,并以这种方式在一个空的SpriteKit项目中复制了它: class GameScene: SKScene { override func didMoveToView(view: SKView) { let sprite = SKSpriteNode(imageNamed:"Spaceship") self.addChild(sprite) //sprite.removeFromParent(

我注意到我的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,iPad Mini Retina带有iOS8-Beta5和OSX 10.9.4。 我还复制了模拟器中的bug;使用xCode6-Beta5;然后将代码移动到
触摸开始
方法中


取消对行的注释
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()
苹果的代码检查与
=
的代码是否相等时,我想这很简单,就像他们在Objective-C中所做的那样。但是因为它很快,你应该做
==
来检查对象是否相等,而不是
=
,所以这是一个愚蠢的错误


恭喜你在SpriteKit代码中发现了一个bug,:D

只有当SKNode具有相同的名称和类时才会发生这种情况。设置为SKNode唯一名称

我的代码: -(void)removeItemWithIdentifier:(食物标识符)标识符{

NSArray *items = [foodItemHolderNode children];
int count = (int)[items count];
for (int i = 0; i < count; i++) {
    FoodItemObject *foodItem = [items objectAtIndex:i];
    int itemID = [[foodItem.objectDictionary objectForKey:FOODITEM_IDENTIFIER_KEY] intValue];

    if (itemID == identifier) {
        [foodItem removeFromParent];
        break;
    }

}

// NSString *name = [NSString stringWithFormat:@"ID%i", (int)identifier];
//SKNode *item = [foodItemHolderNode childNodeWithName:name];
//[item removeFromParent];
NSArray*items=[foodItemHolderNode子项];
整数计数=(整数)[项目计数];
for(int i=0;i

警告从同名错误的父级中删除!!!!!!!

我明白了。我将只命名我的所有节点!感谢感谢您的报告。我也遇到了此错误。是的,逻辑相同,相同的名称,所以比较会得到相同的结果