2

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

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

我想同时提取 <1809> 和 <000000ff>。我已经尝试过本网站其他地方描述的 valueForKey 和 objectforKey 方法。但我认为我很难理解这里的关键和价值是什么。

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


感谢蒂姆的回复。

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

这本字典包含各种各样的东西,比如广告渠道和设备名称。但是,我试图从“advertisementData”中提取广告数据。我使用了 corebluetooth "CBAdvertisementDataServiceDataKey" 提供的密钥,如下所示:

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

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

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

再次感谢。

尼克

4

2 回答 2

3

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

[testdictionary enumerateKeysAndObjectsUsingBlock::^(id key, id object, BOOL *stop) {
    NSLog(@"The key is %@", key);
    NSLog(@"The value is %@", object);
}];
于 2013-09-21T15:05:41.970 回答
0

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

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

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


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

于 2013-09-21T12:35:17.620 回答