我正在使用获取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查询用户最好的做法是什么?
答案 0 :(得分:1)
写作时
NSString *user = @"Joe";
... [NSPredicate predicateWithFormat:@"%K == user", @"id"]
您似乎期望谓词中的“user”被NSString变量的内容(“Joe”)替换,但这不正确。
你必须给出字符串
作为谓词的另一个参数,并添加将由字符串扩展的%@
格式。
NSString *user = @"Joe";
... [NSPredicate predicateWithFormat:@"%K == %@", @"id", user]
此处%K
(对于密钥路径的var arg替换)将是
由密钥"id"
和%@
替换(即
var arg替换对象值)将被替换
通过user
变量的内容。
使用%K
扩展代替
[NSPredicate predicateWithFormat:@"id == %@", user]
具有即使密钥是a也能正常工作的优点 谓词格式字符串语法中的保留字。
答案 1 :(得分:0)
我无法理解您使用"%K == 'Joe"
无论如何,你可以使用谓词:
[NSPredicate predicateWithFormat:@"object.property LIKE[c] %@", stringValue];
或者,
[NSPredicate predicateWithFormat:@"object.property==[c] %@", stringValue];
答案 2 :(得分:0)
试试这个:
NSString *user="Joe";
NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains [cd] %@", user]]]);
答案 3 :(得分:-1)
在不尝试在谓词格式中添加属性名称之前,请创建谓词格式字符串:
NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@",@"id"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat, @"Joe"];
NSArray *filteredArray = [mutableArray filteredArrayUsingPredicate:predicate];
答案 4 :(得分:-2)
使用:
NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%K == '%@'",@"id",user]]]);
使用时:
NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == user", @"id"]]]);"
用户将成为字符串的一部分,它不会替换为NSString对象的内容。