NSPredicate predicateWithFormat:变量替换

时间:2012-11-13 23:47:04

标签: objective-c cocoa nspredicate

假设:

MyObject *object1 = [MyObject createWithName:@"name1"];
MyObject *object2 = [MyObject createWithName:@"name2"];
MyObject *object3 = [MyObject createWithName:@"name3"];

NSArray *myArray = @[object1, object2, object3];
NSString *name = @"name1";

否则

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == '%@'", name];
NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate];

离开我

filtered.count == 0

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                               [NSString stringWithFormat:"name == '%@'",name]];
NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate];

离开我

[filtered objectAtIndex:0] == object1

为什么呢?对于predicateWithFormat来说,这似乎是一种奇怪的行为。 NSPredicate的格式定义是否与NSLog / NSString不同?我在the docs找不到任何明显的东西。

提前致谢!

1 个答案:

答案 0 :(得分:2)

我不知道为什么第二个版本有效,但你的第一个版本不起作用的原因是围绕@的单引号。这使得@是一个文字,所以你实际上是在过滤name == @,这不是你想要的。只需删除单引号即可。