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戻り、検索を続行します。elseif

現在実装されている方法では、メソッドは渡されたノードのみを返します。唯一のreturnステートメントはreturn node、であり、node変更されることはありません。

これがあなたがそれをすることができる1つの方法です:

+ (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 に答える