分数是NSManagedObject。 score.latitude是一个NSNumber,实际上是一个浮点值。
NSLog(@"%f", [score.latitude floatValue]);
显示 0.000000 。
我用来检查nil的构造:
if(score.latitude == nil)
不起作用。
答案 0 :(得分:1)
在NSNumber
实例中存储浮点值是无关紧要的;对象本身是nil
或不是nil
。要检查对象为if( obj == nil )
,if( obj )
在功能上等同于nil
。
因此,您的条件可能没有按预期执行,但正在检查if
。如果您需要更具体的解释,则需要添加有关nil
正文中发生的更多详情。
关键是向[nil floatValue]
发送消息,例如0
始终返回floatValue
,解释为方法的返回类型。例如,如果您将nil
发送到nil
,则会返回浮点数0.如果您发送的消息应该返回一个对象,那么您将获得int
;如果消息应该返回if( score.latitude )
,则会得到整数0。
另请注意,当您说score
时,如果 <{em> latitude
或nil
为score
,则表达式将评估为false(因为如果nil
为latitude
,向其发送nil
将返回{{1}}。)
答案 1 :(得分:0)
浮点数可以是零,因为它不是对象。
NSNumber不是浮点值,而是有一个返回浮点值的方法。
如果NSNumber之前已经实例化,请使用if (score)
来检查。
答案 2 :(得分:0)
我终于明白了,问题是因为Core Data将数据保存到sql数据库,它将nil属性存储为0.000 ......