Objective c 如何检查托管对象的float属性是否为nil?
分数是NSManagedObject。score.latitude是一个NSNumber,它实际上是一个浮点值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)检查
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