2012-03-07 9 views
0

私の問題は基本的にはこれです。変数と変数を見つけようとするには、数値と文字列の可変配列を解析しています。私はオペレーション(@ "+"、@ " - "など)と変数(@ "x"、@ "y"など)との間の微妙な差別化を行うプライベートヘルパーメソッドを持っています。問題は、以下のelseブロックのコードが動作していないことです。私は@ "x"や@ "y"でちょうど良いelse文を取得しますが、作成しようとしているNSSetは機能していません。私はNSLog(ging)を "戻り変数は空"にしておきます。何か案は?setByAddingObjectはオブジェクトを追加していません... grumble

+ (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; 
} 

答えて

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]]; 
+0

ので、単純な、私は、今、壁に頭をバッシングおかげでアンドリューをやめますよ – wvm2008

関連する問題