0

我试图在树中找到匹配的对象,所以我使用的是 ObjC 快速枚举。问题是我的方法找到匹配的值,点击返回线,然后将值设置为 nil 并继续迭代。这是我的方法:

+ (INONode *)findByUUID:(NSString*)uuid fromRootNode:(INONode*)node
{    
    for (INONode * childNode in [node children]) {
        if ([[node uniqueID] isEqualToString:uuid]) {
            break;
        }
        else {
            [INONode findByUUID:uuid fromRootNode:childNode];
        }
    }

    return node;
}

当我通过设置断点来跟踪代码执行时,中断被击中,然后转到返回行,然后返回到继续迭代的语句。我在这里想念什么?

4

1 回答 1

5

由于您的方法是递归的,因此return将您返回到循环中的else分支if并继续搜索。

它当前的实现方式,你的方法只会返回传递给它的节点。唯一的return语句是return node, 并且node永远不会被修改。

这是您可以做到的一种方法:

+ (INONode *)findByUUID:(NSString*)uuid fromRootNode:(INONode*)node
{   
    // Check the root node
    if ([[node uniqueID] isEqualToString:uuid]) {
        return node;
    }

    // Check each child
    for (INONode * childNode in [node children]) {
        node = [INONode findByUUID:uuid fromRootNode:childNode];
        if (node) {
            return node;
        }
    }

    return nil;
}
于 2013-01-30T01:38:59.007 回答