我想知道是否有人可以回答这个问题。我在我的数据库中搜索具有属性名称的对象。我正在寻找名称以特定字母开头的任何对象。
如果我使用:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name LIKE \"a*\")", toFind];
[request setPredicate:predicate];
NSArray *items = [context executeFetchRequest:request error:&error];
我可以找到以“a”开头的对象。
NSString *toFind = @"a";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name LIKE \"%@*\")", toFind];
[request setPredicate:predicate];
NSArray *items = [context executeFetchRequest:request error:&error];
但是这个“项目”是空的。
如果我使用以下内容:
NSString *toFind = @"apple";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name = %@)", toFind];
[request setPredicate:predicate];
NSArray *items = [context executeFetchRequest:request error:&error];
我在项目中得到一个名为“apple”的对象。
任何想法为什么这是......?
Ĵ
答案 0 :(得分:2)
常量需要在第一个示例中使用双引号。如果要使用通配符传入变量,则需要传入完整的表达式:
NSString *variableWildcard = [NSString stringWithFormat:@"%@*", toFind];
[NSPredicate predicateWithFormat:@"(name LIKE %@)", variableWildcard]; // variable
[NSPredicate predicateWithFormat:@"(name LIKE \"a*\")", toFind]; // constant
答案 1 :(得分:0)
我回去重新阅读文档。如果我使用以下它可以工作:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name LIKE[cd] %@)", [toFind stringByAppendingString:@"*"]];