snk*_*snk 6 iphone xcode objective-c ios sprite-kit
升级到iOS 8 b3和Xcode 6 b3后,我在didSimulatePhysics方法中出错:
[self enumerateChildNodesWithName:@"name" usingBlock:^(SKNode *node, BOOL *stop) {
if (node.position.y < 0 || node.position.x>320 || node.position.x<0) {
[node removeFromParent];
}
}];
Run Code Online (Sandbox Code Playgroud)
虽然我启用了异常断点和僵尸对象,但我没有进一步了解为什么会发生这种情况.错误是线程1 BreakPoint 1.3.[level didSimulatePhysics]非常感谢任何帮助.
Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7edf17d0> was mutated while being enumerated.'
Run Code Online (Sandbox Code Playgroud)
iOS版本之间的行为可能会发生变 它可能实际上已经崩溃了,甚至很少甚至在Xcode 5中,你只是没有看到它.
延迟执行removeFromParent方法很容易避免这个问题.这应该可以解决问题,因为操作是在游戏循环中的特定点进行评估而不是即时评估:
[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]];
}
}];
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请使用"旧技巧":使用要删除的项填充NSMutableArray并在枚举后删除该数组中的节点:
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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
854 次 |
| 最近记录: |