#objective-c #assert #nsassert
#objective-c #утверждать #nsassert
Вопрос:
Я пытаюсь использовать NSAssert
в своем коде, но это ничего не дает.
В этом фрагменте кода утверждение должно завершиться ошибкой, но не выполняется:
MSLog(@"cross.obj = %@",[cross obj]);
NSAssert([cross obj]!=nil,@"[cross obj] == nil");
Результатом этого является:
пересечение.obj = (null)
В чем может быть проблема?
Комментарии:
1. По какой-то причине
NS_BLOCK_ASSERTIONS
.
Ответ №1:
NS_BLOCK_ASSERTIONS
блокирует работу утверждений. Попробуйте удалить определение.
Ответ №2:
Причина этого в том, что существует разница между nil
и null
значением.
Поэтому, пожалуйста, проверьте это на других примерах.
Это сработает.
Комментарии:
1. nil и NULL — это одинаковые значения. Вместо этого [NSNull null] является объектом с ненулевым значением.
Ответ №3:
Причина может заключаться в том, что результат из [cross obj]
является [NSNull null]
, не nil
.
Вывод, вероятно, такой, <null>
что означает не NULL
or nil
, а NSNull
одноэлементный объект. Этот объект используется в качестве заполнителя там, где nil
нет опции (например, в NSArray
s).
Другой причиной может быть то, что NS_BLOCK_ASSERTIONS
определен макрос препроцессора, который отключает NSAssert
.
Комментарии:
1.
[cross obj]!=nil
вычисляется какFALSE