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];

SQLの関数を使用するためにNSPredciateまたはNSExpressionを使用する適切な方法はありINますか? 教えてください。

4

1 に答える 1

8

にも同様の機能がありNSPredicateます

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

また、述語文字列を通常の文字列のように扱うことはできません。文字列の配列を作成してフィルタリングに使用することはできません。複数の結合がある場合は、NSCompoundPredicate.

良いリファレンスNSPredicate を使用してデータをフィルタリングする

于 2013-07-17T05:20:53.123 に答える