使用谓词时的空值

时间:2014-06-23 02:11:31

标签: ios objective-c nspredicate

Apple iOS文档中的以下示例充满了废话和错误,我怀疑他们是否曾将代码放在Xcode中! Null Values in Using Predicates

然而,我真的想知道作家真的想向穷人展示什么! 任何人都可以纠正这些糟糕的代码,使其对主题有意义吗?

感谢!!!

=====

空值 除了null(nil)或NSNull null值(即$ value == nil)如果$ value为nil,则比较谓词与null匹配任何值都不匹配。请考虑以下示例。


    NSString *firstName = @"Ben";
NSArray *array = @[ @{ @"lastName" : "Turner" }];
                    @{ @"firstName" : @"Ben", @"lastName" : @"Ballard",
                       @"birthday", [NSDate dateWithString:@"1972-03-24 10:45:32
+0600"] } ];
NSPredicate *predicate =
    [NSPredicate predicateWithFormat:@"firstName like %@", firstName];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
NSLog(@"filteredArray: %@", filteredArray);

// Output:
// filteredArray ({birthday = 1972-03-24 10:45:32 +0600; firstName = Ben; lastName = Ballard;})

谓词确实与包含键firstName的字典匹配,但与字段没有匹配,键firstName没有值。

1 个答案:

答案 0 :(得分:0)

首先是纠正。字面错误:

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

                    @{ 
                       @"firstName" : @"Ben",                                                                     
                       @"lastName"  : @"Ballard",
                       @"birthday"  : [NSDate dateWithString:@"1972-03-24 10:45:32 +0600"]
                     }
                  ];

我美化了一下。 (我呢?)

它希望显示,与nil的值进行比较时,总是会计算为NO,除了比较的常量是一种null(nil,{ {1}},也可能,但未记录[NSNull null])。

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

YES