Question

When debugging in XCode, the debugger is telling me that the NSDictionary object contains 1 key/value pair. When the debug console prints the description of the key/value pair is shows:

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

I want to extract both the <1809> and the <000000ff>. I have tried both the valueForKey and objectforKey methods as described elsewhere on this site. But I think I am having difficulty understanding what is the key and what is the value here.

For example, is "Unknown (<1809>)" the key? Or is "<1809>" the key? Or is 1809 the key?


Thanks Tim for the reply.

The NSDictionary comes from the CoreBluetoothFramework the didDiscoverPeripheral: method is called and passes advertising data into an NSDictionary called "advertisementData".

This dictionary contains all sorts of stuff like the advertising channel and device name. However, I am trying to extract just the advertising data from "advertisementData". I used the key provided by corebluetooth "CBAdvertisementDataServiceDataKey" like this:

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

I was declaring "information" as an NSDictionary* object before. But changed it to NSData* after some more reading on Apples documentation. The result is the same. The debugger says that it contains a key/value pair as follows:

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

Thanks again.

Nik

Was it helpful?

Solution

When you do not know the keys that are present in the dictionary, for example, because the key-value pairs come from an external source, you can use enumerateKeysAndObjectsUsingBlock: method to go through all key-value pairs present in the dictionary:

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

OTHER TIPS

I've never seen this before so this is nothing more than an educated guess:

The dictionary may have been casted from CFDictionaryRef, in which case both the key and value are const void * (instead of NSObject). The key might have been some Core Foundation type holding a file descriptor (hence 1809). The value could be a pointer (or an integer casted to a "pointer": (void *)32).

You should try and find out where the dictionary originates from, because it's the only thing that's going to give you any valuable information.


Update: the docs state that the value of CBAdvertisementDataServiceDataKey is a dictionary. The keys are CBUUID objects, representing CBService UUIDs and the values are NSData objects. (1)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top