5

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

SELECT * FROM suppliers 
WHERE supplier_name in ('IBM', 'Hewlett Packard', 'Microsoft');

我无法弄清楚如何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];

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

4

1 回答 1

8

也有类似的NSPredicate功能

NSArray *skus = @[];
NSPredicate *predicate = [NSPredicate 
                              predicateWithFormat:@"AudioSKU IN %@",skus];

而且你不能像对待普通字符串一样对待谓词字符串。您不能形成一个字符串数组并将它们用于过滤。如果有多个连接,请使用NSCompoundPredicate.

一个很好的参考Using NSPredicate to filter Data

于 2013-07-17T05:20:53.123 回答