Как я могу получить значение/ключи объектов NSDictionary в консоли отладчика?

Я установил точку останова...

если:

(lldb) print [self dictionary]
(NSDictionary *) $5 = 0x0945c760 1 key/value pair

но если я это сделаю:

(lldb) print [[self dictionary] allKeys]
error: no known method '-allKeys'; cast the message send to the method return type
error: 1 errors parsing expression

Даже если я попытаюсь получить доступ к ключу, который, как я знаю, там.

(lldb) print [[self dictionary] objectForKey:@"foobar"]
error: no known method '-objectForKey:'; cast the message send to the method return     type
error: 1 errors parsing expression

Что я делаю неправильно?

Ответ 1

error: no known method '-objectForKey:'; cast the message send to the method return type

Итак, он говорит, что не может вывести информацию о типе возвращаемого значения просто из имени отправляемого сообщения - и это прекрасно. И это даже говорит вам, как именно вы должны решить эту проблему - вы должны привести сообщение к типу возврата метода.

Запуская документы Apple, мы обнаруживаем, что - [NSDictionary objectForKey:] возвращает id - универсальный тип объекта Objective-C. Приведение к идентификатору (или, что еще лучше, если вы знаете, какие типы объектов содержит ваш словарь, приведение к этому точному типу объектов), то делает это:

(lldb) print (MyObject *)[(NSDictionary *)[self dictionary] objectForKey:@"foobar"]

Ответ 2

В командной строке lldb предполагается, что значение, которое вы хотите распечатать, является не объектом. Команда, которую вы должны использовать для печати объектов, - po.

Когда вы укажете lldb для печати значения, он ищет метод, называемый allKeys, который возвращает не-объект и терпит неудачу. Вместо этого попробуйте выполнить следующую команду...

po [[self dictionary] allKeys]

Ответ 3

Чтобы напечатать description объекта в GDB или LLDB, вам нужно использовать print-object или po.

(lldb) po [self dictionary]
(lldb) po [[self dictionary] objectForKey:@"foobar"]

Ответ 4

Почему бы просто не сделать

NSLog(@"dict: %@", dictionary);

или

NSLog(@"dict objectForKey:foobar = %@", [dictionary objectForKey:@"foobar"]);

Ответ 5

Кажется, что в lldb на данный момент появляется ошибка, в результате чего po dictionary[@"key"] печатает пустую строку, а не значение ключа. Используйте [dictionary[@"key"] description], чтобы получить значение.