0

これで、次のようなフィルター クラスが作成されました。

@interface Filter:NSObject {
    NSString *a,
    NSString *b;

    BOOL aisset;
    BOOL bisset;
}

次のようなコアデータからオブジェクトを取得する関数があります。

(NSArray *)findObjs:(Filter *)filter;

この機能を実装するには?この場合、私は答えを知っています:

...
if (!aisset && !bisset) {
}
else if (aisset && !bisset) {
    predicate = [NSPredicate predicateWithFormat:@"a==%@", a];
}
else if (!aisset && bisset) {
    predicate = [NSPredicate predicateWithFormat:@"b==%@", b];
}
else if (aisset && bisset) {
    predicate = [NSPredicate predicateWithFormat:@"a==%@ AND b==%@", a, b];
}
...

しかし、a、b、c などの 3 つの変数をどのように処理すればよいでしょうか。

私はこの方法を試しました:

...
NSString *predicateStr = @"";
if (aisset) ...
if (bisset) ...
if (cisset) ...
predicate = [NSPredicate predicateWithFormat:@"%@", predicateStr];
...

しかし、このコードで実行すると、「フォーマット文字列 "%@" を解析できません」というエラーが表示されます。

4

1 に答える 1

2

あなたが使用することができますpredicate = [NSPredicate predicateWithFormat:@"%K == %@", predicateStr,valueToCheck];

これらの条件を組み合わせたい場合は、 を使用できますappendFormat

アップデート

を使用する必要がありますNSCompoundPredicate。これらの述語を組み合わせることができます

NSMutableArray *subpredicates = [NSMutableArray array];

 if (aisset)
 [subpredicates addObject:[NSPredicate predicateWithFormat:@"a==%@", a]];
if (bisset)
 [subpredicates addObject:[NSPredicate predicateWithFormat:@"b==%@", b]];
...
NSPredicate *finished = [NSCompoundPredicate andPredicateWithSubpredicates:subpreds];//Your final predicate 
于 2012-04-22T08:09:03.090 に答える