检测NSNumber是否为零,零或0

use*_*273 1 null objective-c

我在核心数据中有一个变量.我想检测它是零零的情况,null或其他没有一个很好的值,如222或333.

这应该是微不足道的,但我陷入了Objective-C的语法.

以下代码无效:

if (_item.id!=nil && _item.id!=0) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是id应该是NSNumber.

它被定义为

@property (nonatomic, retain) NSNumber * id;
Run Code Online (Sandbox Code Playgroud)

我应该澄清,当值作为0登录到控制台时,它不起作用.

鉴于变量类型和核心数据的工作方式,我不能告诉你是什么原因导致变量以"0"的形式登录到控制台,但有些事情导致它这样做.基本上,我想排除值不是非零整数的情况(数学而非计算机科学术语).

Avi*_*Avi 5

要检查存储在a中的数值NSNumber,必须调用一个为您提供基本类型的方法.

例如integerValue,unsignedLongLongValue,doubleValue

要正确检查nil和值0,您需要以下内容:

if (_item.id != nil && [_item.id intValue] != 0) {
    // code here
}
Run Code Online (Sandbox Code Playgroud)

因为向nil引用发送消息会返回0,所以您可以使用快捷方式:

if ([_item.id intValue] != 0) ...
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为_item.id必须是非零才能从中返回非零值intValue.