0
考虑:NSPredicate predicateWithFormat:变量替换
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我找不到任何明显的东西。
在此先感谢!
我不知道你的问题的答案,但在第一个谓词中,你不应该在@周围有单引号。这使它成为一个文字,所以你在过滤“@”而不是名字。 – rdelmar
你知道这个问题的答案! – Bryan