虽然这个问题是几年前我只是在同样的问题,迷迷糊糊地解决了这个问题是这样的:
NSArray *values = @[@"FOO", @"bar" ,@"lorem"];
NSString *predicate;
predicate = @"value LIKE[cd] '";
predicate = [predicate stringByAppendingString:
[values componentsJoinedByString:
@"' OR value LIKE[cd] '"]];
predicate = [predicate stringByAppendingString:@"'"];
NSLog(@"%@", predicate);
// Output:
// value LIKE[cd] 'FOO' OR value LIKE[cd] 'bar' OR value LIKE[cd] 'lorem'
这个创建值列表中静态谓词表达式。也许这对某人有用。
更新2:
其实它看起来像下面的更新的解决方案不使用SQLite工作,并产生
'NSInvalidArgumentException',
reason: 'unimplemented SQL generation for predicate : ... (bad LHS)'
我觉得对于数组/词典/套comparisions和IN
有只允许键在操作员的左侧。
UPDATE:
的表达式和我找到了另外的形式给出了一些研究之后,似乎工作得很好:
NSPredicate *predicate =
[NSPredicate predicateWithFormat:
@"lowercase(value) IN %@", values];
此使用函数表达式lowercase:
得到的小写字母表示值。剩下要做的就是确保values
的所有条目都是小写字母,并且您可以使用不区分大小写的IN
表达式。
您是通过谓词构建器还是直接在代码中构建谓词? – Anurag 2010-01-06 23:36:36
这是一个存储在数据模型中的提取请求。 – Sean 2010-01-07 01:37:09