Behavior may change between iOS versions. It may have actually crashed at some point or very rarely even in Xcode 5, you just didn't get to see it.
The problem is easily circumvented by delaying the execution of the removeFromParent method. This should do the trick because actions are evaluated at a specific point in the game loop rather than instantaneously:
[self enumerateChildNodesWithName:@"name" usingBlock:^(SKNode *node, BOOL *stop) {
if (node.position.y < 0 || node.position.x>320 || node.position.x<0) {
[node runAction:[SKAction removeFromParent]];
}
}];
If this won't work use the "old trick": filling an NSMutableArray with to-be-deleted items and removing the nodes in that array after enumeration:
NSMutableArray* toBeDeleted = [NSMutableArray array];
[self enumerateChildNodesWithName:@"name" usingBlock:^(SKNode *node, BOOL *stop) {
if (node.position.y < 0 || node.position.x>320 || node.position.x<0) {
[toBeDeleted addObject:node];
}
}];
for (CCNode* node in toBeDeleted)
{
[node removeFromParent];
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…