假设:
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找不到任何明显的东西。
提前致谢!
答案 0 :(得分:2)
我不知道为什么第二个版本有效,但你的第一个版本不起作用的原因是围绕@的单引号。这使得@是一个文字,所以你实际上是在过滤name == @,这不是你想要的。只需删除单引号即可。