Подтвердить что ты не робот

Как просмотреть значения внутри объекта в отладчике Xcode?

Я знаю, что это может показаться глупым вопросом, поскольку это тривиальная функция в большинстве современных IDE, но я погружаюсь в разработку iOS и знакомлюсь с платформой и SDK, и я не могу понять это. У меня много опыта работы с MS Visual Studio, и я вижу, что Xcode работает очень то же самое, тем не менее, он по-прежнему испытывает недостаток в функциональности в сравнении, но все же очень хороший IDE. Когда дело доходит до отладки, Xcode очень похож на Visual Studio, поскольку вы можете навести указатель мыши на переменную и отобразить текущее значение. Однако, когда дело доходит до объектных переменных, он почти всегда дает только адрес вместе с стрелкой расширения, которая расширяется до "NSObject", которая расширяется до "isa", которая расширяется до всех атрибутов, которые мне ничего не говорят. Я привык к IDE, например Visual Studio, достаточно умный, чтобы сделать некоторую интроспекцию и отобразить для меня фактический объект и все его непосредственные свойства и ценности. Я предполагаю, что Xcode достаточно умен, чтобы сделать это, и я просто не использую его правильно.

Если я устанавливаю точку останова в строке кода, которая включает экземпляр объекта (скажем, экземпляр NSDateComponents), как я могу просмотреть значения его свойств (например, год, неделя, день, час и т.д.)?

Заранее благодарим за помощь!

Изменить: вот скриншот информации, которую я получаю с каждым объектом, который я проверяю... alt text http://joecrotchett.com/images/misc/example.jpg

4b9b3361

Ответ 1

Это расстраивает. Отладчик должен знать структуру каждого объекта, и, по-видимому, нет. Тем не менее, это было намного хуже. Как и в случае с NSArray, они представляют собой массив объектов. Отладчик не знает, какой тип объектов конкретно, и что из-за языка Objective-C, а не отладчика.

Когда вы погружаетесь в разработку iOS, я думаю, вы обнаружите, что Apple отстает от конкурентов примерно на 15 лет, когда дело доходит до разработки. Это не шутка. Но они догоняют и, поверьте мне, это было намного хуже!

Ответ 2

Для моих объектов данных я склонен перезаписать метод description и вывести строку с суммой объекта. Что-то вроде этого:

Printing description of myContact:
{name=Homer, lastname=Simpson, ...}

Это означает, что вы можете быстро осмотреть объект в отладчике или при NSLog его на консоли. Если это описание содержит все соответствующие данные, вы также можете перезаписать isEqual:, чтобы он использовал описание для сравнения двух объектов.

Ответ 3

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

Вы также можете распечатать его значение "description". Передвиньте указатель немного правее, пока оно не окажется над двумя маленькими стрелками "вверх/вниз". Затем слева (ну, "главный" ) нажмите. Появится всплывающее окно, и один вариант будет "Печать описания". Если вы нажмете на это, он поместит вывод своего метода -description в консоль.

Ответ 4

Вы также можете изменить способ отображения Xcode в области локальных переменных, перейдя в "Редактировать сводный формат" в меню правой кнопки мыши.

Например, чтобы заставить его вызвать метод description, вы должны установить его

{(NSString*)[$VAR description]}:s

Немногие подробности здесь: понимание отображения отладки Xcode var

Ответ 5

Ну, еще пару лет прошло, и xcode все еще показывает isa = (класс) на большинстве объектов, а не в состоянии выяснить, что является объектом.

И даже через пару лет Apple по-прежнему отстает, потому что конкуренция проходит вокруг них (и теперь они на 16 лет отстают от текущего состояния конкурентов).