通过字典中的键获取值

时间:2011-05-25 09:33:16

标签: objective-c

我需要获取地图中特定键的值,

id val = [m_cAppIdMap valueForKey:wTimerIds];

其中wTimerIds是无符号短整数。

  

运行时异常:EXC_BAD_ACCESS

     

警告:传递参数1   'valueForKey:'使指针来自   没有强制转换的整数

编辑:

 NSNumber* val = [m_cAppIdMap valueForKey:[NSNumber numberWithUnsignedShort:wTimerIds]];

我得到的警告是, 不兼容的Objective-C类型'struct NSNumber *',期望'struct NSString *'时 从不同的Objective-C类型

传递'valueForKey:'的参数1

我得到的运行时异常是, [NSCFNumber length]:无法识别的选择器发送到实例0x100110c20

我将密钥存储为dictioanry中的unsignedshort。因此,我正在尝试使用该数据类型搜索字典中的值。

2 个答案:

答案 0 :(得分:3)

您不能将原始整数作为键。键必须是对象。您可以将该整数包装为NSString以用作键。

NSString *key = [NSString stringWithFormat:@"%d", wTimerIds];
[m_cAppIdMap setValue:val forKey:key];
id val = [m_cAppIdMap valueForKey:key];

或者您也可以将其包含在NSNumber中。你需要为设置和获取使用相同的东西。也就是说,如果您在setValue:forKey:中使用字符串,那么您需要为valueForKey:使用字符串。同样,如果您使用NSNumber,则需要在两个地方都使用它。

答案 1 :(得分:2)

你应该使用

NSNumber *wTimerIdsNum = [NSNumber numberWithInt:wTimerIds];
id val = [m_cAppIdMap objectForKey:wTimerIdsNum];