2011-10-17 44 views
3

我有一个NSMutableDictionary,analyzedPxDictionary,包含一堆Pixel对象(我创建的自定义类)。除此之外,Pixel对象包含名为rgb的NSArray属性。该数组将始终包含三个NSNumber对象,整数值对应于像素的rgb值。枚举通过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的实例,它似乎不包含任何对象。

我相信我正确初始化了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