Как просмотреть содержимое переменной NSDictionary в отладчике Xcode?

Есть ли способ просмотреть пары ключ/значение переменной NSDictionary через отладчик Xcode? Вот объем информации, когда он полностью развернут в окне переменных:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

Я ожидал, что он покажет мне каждый элемент словаря (аналогично переменной массива).


person Dara Kong    schedule 22.09.2008    source источник


Ответы (7)


В окне gdb вы можете использовать po для проверки объекта.

данный:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

установив точку останова после добавления объектов, вы можете проверить, что находится в словаре

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

Конечно, это NSString объекты, которые хорошо печатаются. YMMV с другими сложными объектами.

person craigb    schedule 22.09.2008
comment
Привет! Что такое гдб? Что такое по? Не уверен, что понял... Спасибо за помощь! :) - person Martin; 09.07.2009
comment
Итак, я узнал, что GDB означает отладчик GNU и на самом деле является окном отладчика Xcode. Теперь мне нужно найти то, что - person Martin; 09.07.2009
comment
В ПОРЯДКЕ! Таким образом, gdb на самом деле является подсказкой в ​​​​консоли, где вы можете вводить команды. Набрав po имя_объекта, вы получили содержимое объекта, напечатанное в консоли. - person Martin; 09.07.2009
comment
po — это псевдоним для объекта печати. - person Brad Cupit; 16.11.2010
comment
Чудесно! Эквивалентно echo var_dump() или print_r() в PHP. - person mpemburn; 11.05.2012
comment
У меня есть файл формата JSON, я использовал NSJSONSerialization для этого файла и сохранил в NSDictionary, как я могу просматривать объекты в словаре - person Vineesh TP; 06.08.2012
comment
Спасибо за комментарий о том, что означают gdb и po, @Martin. - person Danny; 06.12.2012
comment
так .... это все еще предпочтительный способ сделать это? я имею в виду такие IDE, как Eclipse, которые печатают значения для всех общедоступных членов объекта прямо на панели переменных. эта функциональность требует ввода команды в Xcode? - person ericsoco; 03.02.2013
comment
С Xcode 4 вы в значительной степени получаете все вышеперечисленное (т. е. панель консоли отладчика теперь использует lldb, а не gdb), а также возможность получить всплывающую подсказку, показывающую значения объекта, если вы наведете курсор на рассматриваемую переменную. Xcode не является моей обычной вещью, поэтому я не помню, является ли всплывающая подсказка новой или когда она могла быть добавлена. - person craigb; 04.02.2013
comment
Вы также можете поместить po obj в точку останова, а затем автоматически продолжить процесс после точки останова. Таким образом, вам не нужно останавливаться и вводить его каждый раз. - person TechZen; 27.12.2013

Вы можете щелкнуть правой кнопкой мыши любую переменную объекта (ObjC или Core Foundation) и выбрать «Печатать описание в консоль» (также в меню «Выполнить» -> «Просмотр переменных»). Это выводит результат метода -debugDescription объекта, который по умолчанию вызывает -description. К сожалению, NSDictionary переопределяет это для создания набора внутренних данных, которые вам обычно не нужны, поэтому в этом конкретном случае решение craigb лучше.

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

-(NSString *) description
{
    return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}
person Jens Ayton    schedule 22.09.2008

Вы можете использовать CFShow()

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

На выходе вы увидите

{
  bar = foo;
  buz = fiz;
}
person uranpro    schedule 14.06.2012

В XCode 4.6 добавлены следующие функции, которые могут быть вам полезны.

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

Теперь вы можете проверять эти типы объектов без необходимости печатать весь объект в консоли. Наслаждаться!

Источник: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

person jkatzer    schedule 19.04.2013
comment
Это ошибка для меня - показывает только часть моего NSDictionary - person Paul Slocum; 27.02.2014

Нажмите на свой диктофон, затем нажмите на маленький значок «i», он должен выполнить эту работу :-) Xcode5, просмотреть  значение словаря

person Taiko    schedule 26.11.2013

Если вы хотите напечатать их в действии точки останова в современном XCode (да, я через 10 лет после исходного сообщения!), Используйте следующее выражение точки останова в действии «Сообщение журнала»:

@myDictionary.description@

Ниже приведен скриншот моего действия с точкой останова, где событие переменной — это NSString, а переменная contextData — это NSDictionary, содержимое которого я регистрирую: :

person Pat    schedule 19.03.2019

Вы также можете использовать NSLog.

Также вы можете перейти в область отладки или xcode, затем узнать All Variables, Registers, Globals and Statics и выбрать свою переменную. Щелкните правой кнопкой мыши на нем. Затем выберите Print description of "...."

Надеюсь, поможет!

person user1873574    schedule 19.12.2012