Objective-C快速枚举搜索不会中断

Aar*_*egh 0 cocoa objective-c fast-enumeration

我正在尝试在树中找到匹配的对象,所以我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

当我通过设置断点来执行代码执行时,会触发中断,然后转到返回行,然后返回到继续迭代的语句.我在这里错过了什么?

mon*_*gen 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;
}
Run Code Online (Sandbox Code Playgroud)