BOOL - это просто целое число;в нем нет понятия «недопустимо» или «не установлено», то есть у объектов ноль.0 ложно, а все остальное верно.Написанный вами параметр assert не может выдать assert: ((newState == YES) || (newState == NO)) всегда true.Вы не можете делать то, что вы хотите, используя BOOL.Вы можете преобразовать в использование NSNumber, который, как тип объекта, позволяет передать nil и проверить его.
РЕДАКТИРОВАТЬ: Я неверно оцениваю выражение ((newState == YES)|| (newState == NO));если вы находитесь за пределами диапазона, предоставленного YES и NO (то есть newState является чем-то отличным от 0 или 1), тогда пока он оценивается как "true" или "false" в смысле C, он будет not быть равно ДА или НЕТ.(newState ||! newState) всегда истинно в C, но ((newState == YES) || (newState == NO)) только всегда верно, если вы можете быть уверены, что newState содержит значения YES или NO и никаких других.Спасибо Джо за указание на ошибку.