Sprite kit SKNode removeFromParent有时会删除额外的子节点

Sprite kit SKNode removeFromParent有时会删除额外的子节点,sprite-kit,ios8,sknode,Sprite Kit,Ios8,Sknode,我发现游戏中的一个SKNode在其子节点调用removeFromParent时会删除额外的子节点。为了验证这一点,我重写了removeFromParent,并添加了以下断言,以验证只删除了一个子项。断言失败: - (void) removeFromParent { SKNode *parent = self.parent; NSUInteger startingCount = [self.parent.children count]; [super removeFromParent]; if (

我发现游戏中的一个SKNode在其子节点调用removeFromParent时会删除额外的子节点。为了验证这一点,我重写了removeFromParent,并添加了以下断言,以验证只删除了一个子项。断言失败:

- (void) removeFromParent {
SKNode *parent = self.parent;
NSUInteger startingCount = [self.parent.children count];
[super removeFromParent];
if (parent) {
    NSAssert([[parent children] count] == startingCount - 1, @"Wrong number of children after removing one child!");
}
}


我已经为此提交了一份bug报告,但我现在被困在上面,因为我没有解决办法。我想知道是否有其他人遇到过这种情况,并且可能有解决办法

好吧,我凭直觉找到了解决办法

我的子节点对isEqual:返回YES,尽管它们是不同的对象,并且我没有在我的SKSpriteNode子类中重写isEqual:。removeFromParent的实现似乎使用了isEqual:,当非相等节点返回YES时,它删除了多个节点

我的解决方法是用以下内容覆盖isEqual:

- (BOOL) isEqual:(id)object {
    return self == object;
}

运行removeFromParent的受影响节点是什么类?你知道被删除的额外节点是什么吗?它们是我自己的SKSpriteNodecheck的子类任何删除自身或其他节点的代码,您很可能是自己造成了这个问题,因为删除节点是一个基本功能,如果它以某种方式被破坏,将会有很多关于这个问题的报告。我同意,这似乎会被更快地报告。这就是为什么我花了两天时间想弄清楚到底发生了什么。但这显然是一个错误。我下面的回答似乎是一个未记录的非标准isEqual:在SKNode或SKSpriteNode中实现。