Objective c 如何检查托管对象的float属性是否为nil?

Objective c 如何检查托管对象的float属性是否为nil?,objective-c,cocoa-touch,Objective C,Cocoa Touch,分数是NSManagedObject。score.latitude是一个NSNumber,它实际上是一个浮点值 NSLog(@"%f", [score.latitude floatValue]); 显示0.000000 我用于检查零的构造: 如果(score.latitude==nil) 无效。浮点可以为零,因为它不是对象 NSNumber不是一个浮点值,而是一个返回浮点值的方法 NSLog(@"%f", [score.latitude floatValue]); 使用if(score)检查

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

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

我用于检查零的构造:

如果(score.latitude==nil)


无效。

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

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

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

使用
if(score)
检查NSNumber之前是否实例化过。

您的
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
,表达式将计算为false(因为如果
score
nil
,发送
latitude
将返回
nil

,正如我最终理解的那样,问题是因为核心数据将数据保存到sql数据库,该数据库将零属性存储为0.000