2014-01-10 35 views
0

我正在学习NSPredicate,我有一个问题的例子。NSPredicate格式字符串意想不到的结果

NSArray * array = @[@{@"name":@"KudoCC"}, @{@"name":@"123"}] ; 
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name == '%@'", @123] ; 
NSArray * result = [array filteredArrayUsingPredicate:predicate] ; 

这里的参数是@ 123,它是NSNumber类型。我认为它的工作原理与@"name == '123'"相同,但结果为零,我预计为@{@"name":@"123"}

有人可以告诉我为什么吗?先谢谢你。

回答

2

文档here说,

如果使用变量替代使用%@(如像的firstName%@),在引号为您自动添加。

在一般情况下应避免使用引号。如果您使用类似@"%K == '%@'"的东西,则实际上将该密钥与@"%@"进行比较。只有当你有一个像@[@{@"%@": @"KudoCC"}]这样的数组时,你需要这种方式。

+0

不,它是不同的。 “@”%K =='%@'“ 该谓词检查键%K的值是否等于字符串字面值”%@“(注意%@周围的单引号)。在运行时作为参数提供给predicateWithFormat :.“ – KudoCC

+0

是的,我知道,我想你不想这样做。 –

+0

抱歉误会了你,我编辑了我的问题,请帮忙。 – KudoCC

相关问题