如何检查托管对象的浮动属性是否为零?

时间:2011-10-10 19:40:27

标签: objective-c cocoa-touch

分数是NSManagedObject。 score.latitude是一个NSNumber,实际上是一个浮点值。

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

显示 0.000000

我用来检查nil的构造:

if(score.latitude == nil)

不起作用。

3 个答案:

答案 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> latitudenilscore,则表达式将评估为false(因为如果nillatitude,向其发送nil将返回{{1}}。)

答案 1 :(得分:0)

浮点数可以是零,因为它不是对象。

NSNumber不是浮点值,而是有一个返回浮点值的方法。

如果NSNumber之前已经实例化,请使用if (score)来检查。

答案 2 :(得分:0)

我终于明白了,问题是因为Core Data将数据保存到sql数据库,它将nil属性存储为0.000 ......