0

したがって、私の問題は基本的にこれです。数値と文字列の可変配列を解析して、変数を見つけようとしています。正常に動作するプライベート ヘルパー メソッドと、操作 (@"+"、@"-" など) と変数 (@"x"、@"y" など) の違いがあります。問題は、下のelseブロックのコードが機能しないことです。@"x" または @"y" を使用して、else ステートメントの内部に入ることができますが、作成しようとしている NSSet が機能しません。私は NSLog(ging) を「戻り変数が空です」のままにしています。何か案は?

+ (NSSet *)variablesUsedInProgram:(id)program
{

    NSMutableArray *stack;

    if([program isKindOfClass:[NSArray class]]){
        stack = [program mutableCopy];
    }

    NSSet *returnVariables = nil;

    for (int i=0; i<stack.count; i++) {
        if ([[stack objectAtIndex:i] isKindOfClass:[NSString class]]) {
            if ([self isOperation:[stack objectAtIndex:i]]) {
                continue;
            } else {
                returnVariables = [returnVariables setByAddingObject:[stack objectAtIndex:i]];
                if (returnVariables.count == 0) {
                    NSLog(@"returnVariables is empty");
                }
            }
        } 
    }

    return returnVariables;
}
4

1 に答える 1

1

これは、returnVariables を初期化していないためです。この行を変更します。

NSSet *returnVariables = nil;

これに:

NSSet *returnVariables = [NSSet set];

これ-[NSSet setByAddingObject:]はインスタンス メソッドであり、NSSet のインスタンスで呼び出されることを意味します。新しいセットをゼロから作成することを意図したものではなく、呼び出した既存のセットを取得し、そのセットのコピーである新しいセットを作成し、追加のオブジェクトを追加して、その新しいセットを返します。

さらに良いことに、NSMutableSet を使用します。

NSMutableSet returnVariables = [NSMutableSet mutableSet];

// Inside your loop:
[returnVariables addObject:[stack objectAtIndex:i]];
于 2012-03-07T17:16:32.397 に答える