3

analyzedPxDictionary一連のPixelオブジェクト(作成したカスタムクラス)を含むNSMutableDictionaryがあります。特に、Pixelオブジェクトには。と呼ばれるNSArrayプロパティが含まれていますrgb。その配列には常に3つのNSNumberオブジェクトが含まれ、整数値はピクセルのrgb値に対応します。

私は現在、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。そのプロパティがNSArrayのインスタンスとして正しく記述されているrgb場合、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]);

これにより、正しい値がコンソールに正常に出力されます。

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

4

1 に答える 1

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]);
}
于 2011-10-17T15:50:13.127 に答える