在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
答案 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)