2011-10-17 21 views
3

私はNSMutableDictionary、analyzedPxDictionaryを持っていて、たくさんのPixelオブジェクト(作成したカスタムクラス)を含んでいます。ピクセルオブジェクトには、rgbというNSArrayプロパティが含まれています。この配列には、常にピクセルのrgb値に対応する整数値を持つ3つのNSNumberオブジェクトが含まれます。NSMutableDictionaryを列挙する - ループ内からオブジェクトのプロパティにアクセスできません

私は現在、高速列挙を使用してanalyzedPxDictionaryを列挙しようとしています。しかし、ループ内からPixelオブジェクトのプロパティにアクセスできないようです。 rgbは合成されたプロパティであると宣言しており、ドット構文を使ってアクセスできます。しかし、私は私に次のようなエラーを与えて、ループ内からそのプログラムがクラッシュをしようとすると:

'-[NSCFString rgb]: unrecognized selector sent to instance 0xa90bb50'

ここでは、そのエラーを生成するコードの例です:

for (Pixel *px in analyzedPxDictionary) { 
    printf("r: %i, g: %i, b: %i",[[px.rgb objectAtIndex:0] integerValue], [[px.rgb objectAtIndex:1] integerValue], [[px.rgb objectAtIndex:2] integerValue]); 
} 

printf行にブレークポイントを設定して、pxを検査しようとしました。 rgbは、そのプロパティがNSArrayのインスタンスとして正しく記述されている場合は1として表示されますが、オブジェクトは含まれていないようです。

私はrgbを正しく初期化していると思います。説明するには、次のコードを検討してください:

NSString *key; 
for (Pixel *px in analyzedPxDictionary) { 
    key = [px description]; 
} 

Pixel *px = [analyzedPxDictionary objectForKey:key]; 
printf("\nr: %i, g: %i, b: %i",[[px.rgb objectAtIndex:0] integerValue], [[px.rgb objectAtIndex:1] integerValue], [[px.rgb objectAtIndex:2] integerValue]); 

これで、コンソールに正しい値が正常に印刷されます。

なぜforinループ内からrgbプロパティにアクセスできないのですか?

答えて

6

NSDictionariesを高速に列挙すると、各値ではなく、各キーが提供されます。だからあなたはする必要があります:

for (NSString *key in analyzedPxDictionary) 
{ 
    Pixel *px = [analyzedPxDictionary objectForKey:key]; 
    printf("r: %i, g: %i, b: %i",[[px.rgb objectAtIndex:0] integerValue], [[px.rgb objectAtIndex:1] integerValue], [[px.rgb objectAtIndex:2] integerValue]); 
} 
+0

ありがとう。簡単な修正を愛する必要があります:) – maxedison

関連する問題