Как я могу получить значение/ключи объектов 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]
, чтобы получить значение.