如何从NSDictionary(iOS)中的键/值对中提取值

时间:2013-09-21 12:23:45

标签: ios objective-c nsdictionary keyvaluepair

在XCode中调试时,调试器告诉我NSDictionary对象包含1个键/值对。当调试控制台打印出键/值对的描述时显示:

Printing description of testdictionary:
{
    "Unknown (<1809>)" = <000000ff>;
}

我想提取&lt; 1809&gt;和&lt; 000000ff&gt;。我已尝试过本网站其他地方所述的valueForKey和objectforKey方法。但我认为我很难理解什么是关键,这里有什么价值。

例如,"Unknown (<1809>)"是关键吗?或者"<1809>"是关键?或者1809是关键吗?


感谢蒂姆的回复。

NSDictionary来自CoreBluetoothFramework,调用didDiscoverPeripheral:方法并将广告数据传递到名为“advertisementData”的NSDictionary中。

此词典包含广告频道和设备名称等各种内容。但是,我试图从“advertisingData”中提取广告数据。我使用了corebluetooth提供的密钥“CBAdvertisementDataServiceDataKey”,如下所示:

NSData* information;
information = [advertisementData objectForKey:CBAdvertisementDataServiceDataKey];

之前我将“信息”声明为NSDictionary *对象。但在更多阅读Apples文档后,将其更改为NSData *。结果是一样的。调试器说它包含一个键/值对,如下所示:

"Unknown (<1809>)" = <000000ff>;

再次感谢。

的Nik

2 个答案:

答案 0 :(得分:3)

如果您不知道字典中存在的键,例如,因为键值对来自外部源,您可以使用enumerateKeysAndObjectsUsingBlock:方法遍历所有键值对在字典中:

[testdictionary enumerateKeysAndObjectsUsingBlock::^(id key, id object, BOOL *stop) {
    NSLog(@"The key is %@", key);
    NSLog(@"The value is %@", object);
}];

答案 1 :(得分:0)

我以前从未见过这个,所以这只不过是一个有根据的猜测:

字典可能是从CFDictionaryRef投放的,在这种情况下,键和值都是const void *(而不是NSObject)。密钥可能是一些持有文件描述符的Core Foundation类型(因此为1809)。该值可以是指针(或者转换为“指针”的整数:(void *)32)。

您应该尝试找出字典的来源,因为它是唯一可以为您提供任何有价值信息的东西。


更新:文档声明CBAdvertisementDataServiceDataKey的值是字典。键是CBUUID个对象,表示CBService个UUID,值是NSData个对象。 (1)