Просмотр значения синтезированного свойства в отладчике XCode, когда нет резервной переменной - PullRequest
10 голосов
/ 17 июля 2010

Я только недавно начал использовать синтезированные переменные экземпляра в моих проектах iPhone. Проблема в том, что я не вижу синтезированные ивары в отладчике. Есть ли способ просмотреть свойства объекта в отладчике, когда он не использует явно объявленные переменные экземпляра?


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

Я использую Xcode 3.2.4 / iPhone Simulator / LLVM Compiler 1.5.

Ответы [ 3 ]

9 голосов
/ 17 июля 2010

Отредактировано, чтобы добавить ответ ко второй части:

Это работает в Xcode 3.1, поэтому я не понимаю, почему это не будет работать в более поздних версиях

ЧтоВы можете сделать это, посылая сообщения непосредственно объекту из консоли во время отладки.

Предположительно, вы остановились на точке останова и смотрите на переменные в представлении отладки.для объектов они показывают вам указатели.Возможно, вы не видите iVar, но у вас есть указатель на объект, и вы можете отправлять ему сообщения.например:

  • Вы остановились на некоторой точке останова в пределах объекта
  • В режиме просмотра переменной указатель адреса self будет (скажем) 0x1031380.
  • В консоли введите po [0x1031380 title] (обратите внимание, что точки с запятой нет) и введите
  • . Вы должны увидеть, что вы хотите в консоли.

Когдавы объявляете свойство с (retain) и затем синтезируете свойство, вы создаете сеттеры, которые сохраняют переданный им объект / значение.поэтому в приведенном выше случае вы должны переписать метод следующим образом:

- (void)viewDidLoad {
    self.title = @"woah";
}

И строка будет сохранена как часть установщика.Кроме того, я предпочитаю использовать (copy) для кластеров классов, которые имеют изменяемые / неизменяемые пары (NSString, NSSet, NSArray и т. Д.).Таким образом, свойство не может быть изменено извне.

5 голосов
/ 29 февраля 2012

Вам не нужно использовать указатель / адрес переменной.Вместо этого вы можете использовать имя переменной следующим образом:

po [myVar title]

xcode поможет вам ввести имя переменной (myVar выше), если переменная находится в области видимости.

0 голосов
/ 03 августа 2012

Если вы не хотите вводить po [blahblah] вручную, вы можете сделать то, что xnav предложил здесь , где вы либо явно объявляете переменные экземпляра в заголовке, либо "в праве области переменных отладки"нажмите «self» и выберите «Add Expression», затем введите, например, «_wordLength», и будет отображен значок «

»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...