【问题标题】:Last record in a for-loop is not processed不处理 for 循环中的最后一条记录
【发布时间】:2013-10-09 19:06:07
【问题描述】:

当我从代码中的数组修复 zPosition 时,我遇到了一个奇怪的问题。不加载最后一条记录以及具有相同名称的实际精灵。除了最后一个作品之外的所有其他精灵。

代码:

// Refresh the nodes
NSLog(@"#1 workingArray: %@", workingArray);
for (NSString *aCard in workingArray) {

    if ([aCard isEqualToString:[workingArray objectAtIndex:[workingArray count]-1]]) {
        NSLog(@"#2 Found %@", aCard); // To check that the record is present
    }

    SKNode *refreshNodeForZPos = [_background childNodeWithName:aCard];
    refreshNodeForZPos.name = aCard;
    refreshNodeForZPos.zPosition = zPosition;
    zPosition++;
    NSLog(@"#3 refreshNode:%@ + z:%.0f", refreshNodeForZPos.name, zPosition);
}

查看#1 NSLog 输出时,我可以看到最后一条记录“CJ”在那里:

'#1' workingArray: (
C6b,
C2b,
CQb,
C8b,
CAb,
CKb,
C5b,
C10b,
C9b,
C4b,
C7b,
C3b,
CJ

#2 NSLog 只是确保我确实找到了记录,而#3 正在记录循环:

'#3' refreshNode:C6b + z:1
'#3' refreshNode:C2b + z:2
'#3' refreshNode:CQb + z:3
'#3' refreshNode:C8b + z:4
'#3' refreshNode:CAb + z:5
'#3' refreshNode:CKb + z:6
'#3' refreshNode:C5b + z:7
'#3' refreshNode:C10b + z:8
'#3' refreshNode:C9b + z:9
'#3' refreshNode:C4b + z:10
'#3' refreshNode:C7b + z:11
'#3' refreshNode:C3b + z:12
'#2' Found CJ
'#3' refreshNode:(null) + z:13

最后一条记录 (z:13) 为空,我不明白为什么。

【问题讨论】:

  • 做过调试吗? childNodeWithName 是否返回有效实例?
  • "[_background childNodeWithName:aCard]" 在通过@"CJ" 时返回 nil 吗?
  • @Wain 我已经调试了几个小时 :-) 我确实在 childNodeWithName 上插入了一个 NSLog,它为最后一条记录返回 null。
  • @Brian Walker Brian 是的。
  • 这就是你得到null日志的原因。不知道你在找什么...

标签: ios objective-c for-loop sprite-kit


【解决方案1】:

正如 Brian Walker 正确指出的那样,问题出在代码的其他部分,而不是循环本身。

每个精灵实际上由两个精灵表示:“CJb”(精灵的一个示例)是精灵的背面,“CJ”是精灵的正面。它们都被添加到背景中。当双击一个精灵时,会发生以下情况:

  1. 我检查精灵名称的末尾是否有“b”,如果有则显示背面,如果没有则显示正面
  2. 我创建了一个新的 SKSpriteNode,其中包含应该显示的前后精灵并保存它的凭据
  3. 我删除“旧”精灵并对新精灵执行“addChild”,同时使用名称更新数组,用于设置正确的 zPositions

我的错误

在最初的 addChild 中,所有精灵都是这样添加的:

[_background addChild: theSprite]

当我后来将精灵从“CJb”换成“CJ”时,我使用了:

[self addChild: theSprite]

...然后,在更新“workingArray”后处理上述代码。在我将 addChild 中的“self”改回“_background”后,一切正常。

总结:我必须使用相同的背景添加新的精灵。

但是,我仍然不完全理解为什么它没有处理最后一条记录。

另外,非常感谢@Brian Walker 和@Wain :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2022-08-14
    • 2022-01-17
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多