0

我用来获取 nsmutable 数组的一些内容,如果我不使用 nsstring 进行查询,它可以正常工作:

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == 'Joe", @"id"]]);

但是尝试使用 nsstring 来查询它不起作用的用户:

NSString *user="Joe";

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == user", @"id"]]]);

你们中的任何人都知道我在做什么错吗?或者使用 NSString 查询用户最好的方法是什么?

4

5 回答 5

1

当你写

NSString *user = @"Joe";
... [NSPredicate predicateWithFormat:@"%K == user", @"id"]

您似乎期望谓词中的“用户”被 NSString 变量的内容(“乔”)替换,但这是不正确的。

您必须将字符串作为谓词的另一个参数提供,并添加%@将由字符串扩展的格式。

NSString *user = @"Joe";
... [NSPredicate predicateWithFormat:@"%K == %@", @"id", user]

这里%K(这是 var arg 替换key path)将被 key 替换"id",并且%@(这是 var arg 替换对象值)将被user变量的内容替换。

使用%K扩展代替

[NSPredicate predicateWithFormat:@"id == %@", user]

优点是即使键是谓词格式字符串语法中的保留字,它也能正常工作。

于 2013-06-28T19:34:05.483 回答
0

试试这个:</p>

NSString *user="Joe";

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains [cd] %@", user]]]);
于 2013-07-02T09:01:52.530 回答
0

我无法猜测你为什么使用"%K == 'Joe"

无论如何,您可以将谓词用作:

[NSPredicate predicateWithFormat:@"object.property LIKE[c] %@", stringValue];

或者,

[NSPredicate predicateWithFormat:@"object.property==[c] %@", stringValue];
于 2013-06-28T18:57:28.960 回答
-1

在不要尝试在谓词格式中添加属性名称之前制作您的谓词格式字符串:

NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@",@"id"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat, @"Joe"];
NSArray *filteredArray = [mutableArray filteredArrayUsingPredicate:predicate];
于 2017-05-03T11:59:33.397 回答
-2

利用:

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%K == '%@'",@"id",user]]]);

当您使用:

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == user", @"id"]]]);"

用户将成为字符串的一部分,它不会替换为 NSString 对象的内容。

于 2013-06-28T18:56:02.273 回答