NSAssert не работает

#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