0

鉴于:

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 不同?我在文档中找不到任何明显的东西。

提前致谢!

4

1 回答 1

2

我不知道为什么第二个版本有效,但您的第一个版本无效的原因是 @ 周围的单引号。这使 @ 成为文字,因此您实际上是在过滤 name == @,这不是您想要的。只需删除单引号,它就会起作用。

于 2012-11-14T04:38:27.133 回答