Не имеет значения, что в вашем экземпляре NSNumber
хранится значение с плавающей точкой; сам объект либо nil
, либо нет. Чтобы проверить, является ли объект nil
, if( obj == nil )
функционально эквивалентен if( obj )
.
Таким образом, ваше условное выражение может не выполнять то, что вы ожидаете, но оно означает проверку nil
. Вам нужно будет добавить больше деталей о том, что происходит в теле if
, если вам нужно более конкретное объяснение.
Ключевым моментом является то, что отправка сообщения на nil
, такого как [nil floatValue]
, всегда возвращает 0
, что интерпретируется как тип возврата метода. Например, если вы отправите floatValue
на nil
, вы вернетесь с плавающей точкой 0. Если вы отправите сообщение, которое должно вернуть объект, вы получите nil
; сообщение, которое должно вернуть int
, вы получите целое число 0.
Также имейте в виду, что когда вы говорите if( score.latitude )
, выражение будет оцениваться как ложное, если или score
или latitude
равно nil
(потому что если score
равно nil
, отправка latitude
к нему вернется nil
.)