Ios 使用谓词时为空值

Ios 使用谓词时为空值,ios,objective-c,nspredicate,Ios,Objective C,Nspredicate,下面这个苹果iOS文档中的例子充满了垃圾和错误,我怀疑他们是否将代码放入了Xcode! 然而,我真的很想知道作家到底想向可怜的读者展示什么! 有人能纠正那些蹩脚的代码,使它对主题有意义吗 谢谢 ================ 空值 比较谓词不匹配除null(nil)之外的任何null值,或者NSNull null值(即,($value==nil)在$value为nil时返回YES)。考虑下面的例子。 谓词与包含键名值Ben的字典匹配,但与键名没有值的字典不匹配。首先更正。字面意思是错误的

下面这个苹果iOS文档中的例子充满了垃圾和错误,我怀疑他们是否将代码放入了Xcode!

然而,我真的很想知道作家到底想向可怜的读者展示什么! 有人能纠正那些蹩脚的代码,使它对主题有意义吗

谢谢

================

空值 比较谓词不匹配除null(nil)之外的任何null值,或者NSNull null值(即,($value==nil)在$value为nil时返回YES)。考虑下面的例子。




谓词与包含键名值Ben的字典匹配,但与键名没有值的字典不匹配。

首先更正。字面意思是错误的:

NSArray *array = @[
                    @{ @"lastName"  : @"Turner" },

                    @{ 
                       @"firstName" : @"Ben",                                                                     
                       @"lastName"  : @"Ballard",
                       @"birthday"  : [NSDate dateWithString:@"1972-03-24 10:45:32 +0600"]
                     }
                  ];
我把它美化了一点。(是吗?)

它想表明,与
nil
的值进行比较时,结果总是
NO
,除了与之比较的常数是一种null(
nil
[NSNull null null]
,可能也是,但没有记录在案的
nil

此外,这似乎更重要,它想表明,如果将一种空值与
nil
的值进行比较,它的计算结果为
YES
。由于以下问题,必须澄清这一点:

id a = nil;
id b = a;   // Pretty equal

if ([a isEqual:b])
{
   // not reached, because isEqual: will return NO (nil behavior)
}

当您按名字筛选时,为什么希望它给您一个没有名字的条目?如果您想获取所有名字,为什么还要应用谓词?只需获取全部而不使用谓词。但是,如果您想使用谓词thn而不是设置firstName nil,请将谓词设置为nil。NSArray*filteredArray=[array filteredArray使用谓词:nil];:p@iVishal+@CrimsonChris:演示代码来自《苹果指南》,它是关于谓词的。请点击我原始问题中的链接。阿明·内格姆·阿瓦德:谢谢你的回答!如果未达到([a isEqual:b]),是因为两个“nil”对象(指针)的内容不相等吗?这是因为发送到
nil
的消息的结果始终为0(对于布尔类型,这意味着
NO
)。因此,
a
nil
才是重要的。(但是如果
b
不是
nil
,没有人会奇怪为什么会返回
NO
id a = nil;
id b = a;   // Pretty equal

if ([a isEqual:b])
{
   // not reached, because isEqual: will return NO (nil behavior)
}