Как проверить, что свойство float управляемого объекта равно nil? - PullRequest
0 голосов
/ 10 октября 2011

Оценка - NSManagedObject.Score.latitude - это NSNumber, который фактически является значением с плавающей запятой.

NSLog(@"%f", [score.latitude floatValue]);

показывает 0.000000 .

Конструкция, которую я использую для проверки на ноль:

if (score.latitude == nil)

не работает.

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Не имеет значения, что в вашем экземпляре 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.)

0 голосов
/ 14 октября 2011

Как я, наконец, понимаю, проблема в том, что Core Data сохраняет данные в базе данных sql, которая хранит свойства nil как 0,000 ...

0 голосов
/ 10 октября 2011

Число с плавающей точкой может быть нулевым, так как это не объект.

И NSNumber не является значением с плавающей точкой, но имеет метод, который возвращает значение с плавающей точкой.

используйте if (score), чтобы проверить, был ли создан NSNumber ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...