雖然這個問題是幾年前我只是在同樣的問題,迷迷糊糊地解決了這個問題是這樣的:
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