2015-12-09 3 views
1

Это действительно меня озадачивает. У меня есть словарь, где я отслеживаю количество ошибок и предупреждений. Ну в блоке if (...), также на фото, я тестирую 0 ошибок, и по какой-то причине каждая комбинация кода, который я пробовал, говорит, что количество ошибок> 0 истинно.Неожиданный результат в выражении if

Вот некоторые результаты из консоли LLDB ...

(lldb) ро violationCounts [@ "ошибки"]

(lldb) ро [violationCounts [@ "ошибки "] класс]

__NSCFNumber

(lldb) р violationCounts [@" ошибки "]> 0 (BOOL)

$ 2 = истинный

(lldb) р ((ИНТ) violationCounts [@ "ошибки"])> 0 (BOOL)

$ 3 = верно

enter image description here

Почему это оценивается до errorsCounts is> 0

+1

Прочитайте документацию для 'NSNumber', и вы обнаружите свою проблему. HTH – CRD

+0

Dooohhh ... the (int) рядом с номером бросил меня полностью из wack. Даже не заметил NSCFNumber влево или даже результат [class]. Мне действительно нужно немного поспать. –

ответ

2

Поскольку это экономит д, как NSNumber, оно должно быть:

po [violationCounts[@"errors"] integerValue] > 0 
1

Значение violationCounts[@"errors"] является NSNunber поэтому он должен быть преобразован в целое число, не бросает:

if ([violationCounts[@"errors"] integerValue] > 0) 

Все значения в NSDictionaries являются объектами.

Чтобы распечатать его в deugger, нет необходимости его преобразовывать, потому что будет вызван метод описания и который преобразует его для отображения. Но вместо «p» (печать) необходимо использовать «po» (печатный объект):

po violationCounts[@"errors"] 

 Смежные вопросы

  • Нет связанных вопросов^_^