Вопрос по xcode, objective-c – BOOL настроен неправильно, вывод отладки сбивает с толку

0

Я пытаюсь установить BOOL в XCode, и по какой-то причине он просто отказывается работать. Ничто другое не устанавливает этот бул, только этот один экземпляр. Мой код ниже:

.час

@interface SuspectsViewController : UIViewController 
{
    BOOL boolContentChanged;
}

@property (nonatomic) BOOL boolContentChanged;

.m

@synthesize boolContentChanged;

-(IBAction)buttonPressed:(id)sender
{
    boolContentChanged = true;
}

Я также пытался использовать self.boolContentChanged, но ничего не происходит. Чтобы попытаться отладить это, я использовал po boolContentChanged и получил следующий вывод: первый po перед boolContentChanged = true, а второй после.

(lldb) po boolContentChanged
(BOOL) $4 = '\0' <nil>
(lldb) po boolContentChanged
(BOOL) $7 = '\0' <nil>

Указывает ли $, что он указывает на определенный адрес, или это только для отладочной ссылки?

Кроме того, есть ли причина, по которой это будет ноль? Конечно, не требуется неявная настройка, если это bool, а не указатель?

Любой совет по этому вопросу высоко ценится, так как я не могу решить его, Заранее спасибо, Elliott

Objective-C используетYES а такжеNO логические литералы, а неtrue а такжеfalse, Не уверен, что это поможет ... trojanfoe
Привет, Кен, да, он появляется в & @asinterSupectViewController: UIViewController {BOOL boolContentChanged;} & apos; затем «@property (nonatomic) BOOL boolContentChanged;» Затем он синтезируется в .m и доступен, как упомянуто выше, с использованием «boolContentChanged = true». Нет другой ссылки на него, и нет других переменных с таким же именем. Я немного запутался, думаю, у меня была эта проблема раньше, но я не могу вспомнить, почему ... Elliott D'Alvarez
Позвольте мне переспросить по-другому: этоBOOL boolContentChanged; от вашего фрагмента выше в фигурных скобках вашего@interface? подобно@interface MyClass : SuperClass { BOOL boolContentChanged; /* other ivars */ } /* methods */ @end? Ken Thomases
Фрагмент из вашего .h файла неоднозначен. Я подозреваю, что у вас есть как переменная экземпляра (синтезированная для вас), так и глобальная переменная с тем же именем, и вы ссылаетесь на другую в разных контекстах. Пожалуйста, покажите точный код. Ken Thomases
Привет всем, я имел обыкновение иметь это как bool = true, а не как BOOL, но на самом деле не должно быть никакой разницы с точки зрения определения, в любом случае, это даст шанс. И, к сожалению, мой код имеет длину около 500 строк, но он определенно не имеет глобальной переменной с тем же именем. Вот почему я так запутался в этом вопросе. Обычно это будет отображаться как предупреждение, если это все равно произойдет, не так ли? Elliott D'Alvarez

Ваш Ответ

3   ответа
-1

вам нужно использовать YES или NO, а не true и false.

Это не имеет практического значения; они имеют одинаковые значения.
Я еще не пробовал, попробую, как только мой код будет извлечен из хранилища. Elliott D'Alvarez
Те же теории, что и выше, только что попробовал, и это, к сожалению, не имеет никакого значения. Elliott D'Alvarez
Вы пробовали настроить свойство с помощью assign?
0

что происходит. Что касается отладчика, он действительно имел практическое значение, используя YES / NO, в отличие от true / false, значения все еще устанавливались, если я использовал p, чтобы явно найти их, но при использовании YES / NO они показывались бы автоматически. Итак, еще раз, кажется, что это intellisense, который не удается обновить в определенных ситуациях.

Спасибо всем за помощь.

8

BOOL тип не является объектом Objective-C. Используйте & quot; p & quot; или & quot; распечатать & quot; отображать значениеBOOL, int, char, так далее.

Номер доллара («$ 4»), выводимый отладчиком в ответ на ваш «po» Команда присваивает результат переменной в отладчике, которую можно использовать в последующих командах.

Что касается проблемы, которую вы описываете, можете ли вы подтвердить, что ваш метод действия действительно вызывается? Попробуйте добавить:

NSLog( @"In %@", NSStringFromSelector( _cmd ));

на ваш-buttonPressed метод. Если ваше действие фактически вызывается, вы увидите это в отладчике:

In buttonPressed:

Вы также можете иметьNSLog() выведите значения вашегоBOOL:

NSLog( @"Before: %d", (int)boolContentChanged );
Error: User Rate Limit Exceeded Elliott D'Alvarez

Похожие вопросы