2015-05-29 2 views
1

В iOS мы столкнулись с проблемой с BOOL против bool.BOOL vs. bool на iOS7

Я знаю, что это бит-поле, а другое - целое число.

Однако следующий код ведет себя по-разному на iOS7 и iOS8:

self.nativationItem.rightBarButton = _editButton; //where editButton is a UIBarButtonItem. 

_editButton.enabled = _some_NSArray.count; 

поскольку графа определяется как NSUInteger, мы ожидаем, что это будет 0 (ложь) или для любого другого значения, которое> 0.

Однако, на iOS7, когда _some_NSArray.count> 0, editButton отключен, но на iOS8 включен editButton! Точно такой же код.

Другое дело, что если бы мы бросили _some_NSArray.count к «BOOL» (не с заглавной буквы), он работает на обоих, но если мы бросим его (BOOL) он работает на 8, но не 7.

Любые идеи?

ответ

6

enabled является BOOL. count есть NSUInteger. Правильный код будет:

_editButton.enabled = _some_NSArray.count > 0; 

BOOL должен быть назначен только YES или NO значения (или эквивалентный результат условного выражения).

0

BOOL является

typedef signed char BOOL; 

определено в objc.h

BOOL является

#define bool _Bool 

определен макрос из stdboo.h который такое же значение, логическое значение в языке C

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