как просмотреть содержимое переменной nsdictionary в отладчике xcode?

<p>есть ли способ просмотреть пары ключ/значение переменной nsdictionary через отладчик xcode? вот степень информации, когда она полностью раскрывается в окне переменных:</p><pre><code>variable value summary jsondict 0x45c540 4 key/value pairs nsobject {...} isa 0xa06e0720 </code></pre><p>я ожидал, что он покажет мне каждый элемент словаря (аналогично переменной массива).</p>

<p>в окне gdb вы можете использовать <code>po</code> для проверки объекта.</p><p>дано:</p><pre><code>nsmutabledictionary* dict = [[nsmutabledictionary alloc] init]; [dict setobject:@"foo" forkey:@"bar"]; [dict setobject:@"fiz" forkey:@"buz"]; </code></pre><p>установив точку останова после добавления объектов, вы можете проверить, что находится в словаре</p><pre><code>(gdb) po dict { bar = foo; buz = fiz; } </code></pre><p>конечно, это <code>nsstring</code> объекты, которые хорошо печатаются. ymmv с другими сложными объектами.</p>

<p>вы можете щелкнуть правой кнопкой мыши любую переменную объекта (objc или core foundation) и выбрать "печать описания в консоль" (также в run-> просмотр переменных). это выводит результат метода <code>-debugdescription</code> объекта, который по умолчанию вызывает <code>-description</code>. к сожалению, <code>nsdictionary</code> переопределяет это, чтобы создать набор внутренних данных, о которых вы обычно не заботитесь, поэтому в данном конкретном случае решение craigb лучше.</p><p>отображаемые ключи и значения также используют <code>-description</code>, поэтому, если вам нужна полезная информация о ваших объектах в коллекциях и в других местах, переопределение <code>-description</code> является обязательным. я обычно реализую его в соответствии с этим, чтобы соответствовать формату реализации <code>nsobject</code> по умолчанию:</p><pre>- (nsstring *) description { return [nsstring stringwithformat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]] ; }</pre>

<p>вы можете использовать cfshow ()</p><pre><code>nsmutabledictionary* dict = [[nsmutabledictionary alloc] init]; [dict setobject:@"foo" forkey:@"bar"]; [dict setobject:@"fiz" forkey:@"buz"]; cfshow(dict); </code></pre><p>в выходной вы увидите</p><pre><code>{ bar = foo; buz = fiz; } </code></pre>

<p>xcode 4.6 добавил следующие функциональные возможности, которые могут быть вам полезны</p><pre><code>the elements of nsarray and nsdictionary objects can now be inspected in the xcode debugger </code></pre><p>теперь вы можете проверять эти типы объектов, не печатая весь объект в консоли. наслаждайтесь!</p><p>источник: <a href="http://developer.apple.com/library/mac/#documentation/developertools/conceptual/whatsnewxcode/articles/xcode\_4\_6.html">http://developer.apple.com/library/mac/#documentation/developertools/conceptual/whatsnewxcode/articles/xcode\_4\_6.html</a> </p>

<p>нажмите на ваш dict, затем нажмите на маленький значок "i", он должен сделать работу :-) <img src="https://i.stack.imgur.com/cnkoy.png" alt="xcode5, view the value of a dict"></p>

<p>вы также можете использовать <a href="http://cocoadev.com/wiki/nslog">nslog</a> .</p><p>также вы можете перейти в область отладки или xcode, затем узнать <code>all variables, registers, globals and statics</code> и выбрать свою переменную. щелкните правой кнопкой мыши по нему. затем выберите <code>print description of "...."</code></p><p>надеюсь, поможет!</p>

<p>если вы хотите напечатать их в действии точки останова в современном xcode (да, я через 10 лет после первоначальной публикации!), используйте следующее выражение точки останова в действии "журнал сообщений":</p><p>@ mydictionary.description @</p><p>ниже приведен снимок экрана с моим действием точки останова, где переменное событие - это nsstring, а переменная contextdata - это nsdictionary, в который я записываю содержимое: <a href="https://i.stack.imgur.com/bxtpg.png"><img src="https://i.stack.imgur.com/bxtpg.png" alt=""></a> :</p>