基于SQL IN()函数为Core Data创建NSPredicate

tGi*_*ani 5 iphone core-data objective-c ios

我有一个场景,我必须根据给定列的多个值从Core Data中获取多个记录.用于此目的的常见SQL查询将是

SELECT * FROM suppliers 
WHERE supplier_name in ('IBM', 'Hewlett Packard', 'Microsoft');
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚我是如何IN()为此目的使用本机函数的.

我现在创造的方式NSPredicate似乎是多余的,如下所示.

NSMutableArray *predicateArray = [NSMutableArray array];
[skus enumerateObjectsUsingBlock:^(NSString *sku, NSUInteger idx, BOOL *stop) {
    [predicateArray addObject:
        [NSString stringWithFormat:@"(AudioSKU == \"%@\")", sku]];
}];

NSString *predicateString = [predicateArray 
                                  componentsJoinedByString:@" OR "];
NSPredicate *predicate = [NSPredicate 
                                  predicateWithFormat:predicateString];
Run Code Online (Sandbox Code Playgroud)

是否有正确的方法使用NSPredciate或NSExpression来使用INSQL的功能?请赐教.

Anu*_*das 8

还有一个类似的功能NSPredicate,以及

NSArray *skus = @[];
NSPredicate *predicate = [NSPredicate 
                              predicateWithFormat:@"AudioSKU IN %@",skus];
Run Code Online (Sandbox Code Playgroud)

而且你也不能像通常的字符串一样处理谓词字符串.您不能形成字符串数组并使用它们进行过滤.如果有多个连接使用NSCompoundPredicate.

一个很好的参考使用NSPredicate来过滤数据