2012-01-07 10 views
0

大きなデータ配列の中で、特定のプロパティがオブジェクトの特定の値と等しいかどうかをチェックして配列を構築する関数があります。データ配列は完全に初期化されていますが、オブジェクトを取り出すことはできません。コードを調べると、XCodeは下の「もの」変数が有効範​​囲外であることを伝えます。比較時の不思議な振る舞い

これは機能上のエラーですか、データ配列の問題ですか? (私はデータ配列を独立してチェックし、正しい数と正しいメンバーを持っています)。

- (NSMutableArray *)parseForProperty:(NSString*)property EqualTo:(NSString*)value 

{ 
    NSMutableArray *result = [[NSMutableArray alloc] init]; 

    SEL selector = NSSelectorFromString(property); 

    NSLog(@"parseProp"); 

    for (RCDetailItem *thing in [[self defaultStore] parsedData]) 
    { 
     NSLog(@"Thing Title: %@", thing.title); 
     if ([thing performSelector:selector] == value) 
     { 
      [result addObject:thing]; 
     } 
    } 
    return result; 
} 

答えて

2

現在のところ、文字列は比較せずに参照します。 あなたが試すことができます。

NSString * thingProperty = [thing performSelector:selector]; 
if ([thingProperty isEqualToString:value]) 
.. 

しかし、私は、あなたが参照するので、それが解決されると確信している「は、以下の変数が範囲外です」。コンパイルエラーですか? アルノー・デル @

+0

私は* NOT *を意味しました。 –

+3

あなたの答えを編集することができます – iHunter

+0

これは私の問題を解決しなかったが、私の問題は私のデータ配列であることがわかった、ここで私の質問を参照してください:http://stackoverflow.com/questions/8774602/how-to-keep- app-quitsまでのメモリ内変数 –

2
  1. Objective Cのオブジェクトが(異なるインスタンスが明らかにそれらが同じ値であっても、異なるポインタ値を有する)それらへのポインタとを比較することによって比較することができない、権利です。値で比較するには-isEqual:メッセージを使用する必要があります。

  2. Variable below is out of scopeデバッガメッセージは、コンパイラ設定で有効になっているコード最適化によって頻繁に発生するため、変数がコンパイラによって暗黙的に消去され、デバッガでその値を表示する機会がありません。

    あなたはデバッグ設定をデバッグしていて、最適化なしに最適化レベルを設定することでオフになっていることを確認してください。

関連する問題