2017-11-06 4 views
0

における複数任意の値を持つNSCompoundPredicateためにIは、基地述語「predは」と1つのオプション述語「fieldQuery」は、Objective-Cの

NSArray *predArray = (fieldQuery != nil) ? @[pred, rangeQuery, fieldQuery] : @[pred,rangeQuery]; 

Iを許可したい両方「fieldQuery」とCoreDataクエリを持っているにNSArrayおよび 'rangeQuery'はオプションです。私はそれがこのように作業があります。

NSArray *predArray; 

if (rangeQuery != nil) { 
    predArray = (fieldQuery != nil) ? @[pred, rangeQuery, fieldQuery] : @[pred,rangeQuery]; 
} else { 
    predArray = (fieldQuery != nil) ? @[pred, fieldQuery] : @[pred]; 
} 

NSPredicate *compoundPred = [NSCompoundPredicate andPredicateWithSubpredicates:predArray]; 

をしかし、これは簡潔に、クリーン明確ではないが、配列はNSArrayのではなくNSMutable配列にする必要があるので、それはこの方法を行っています。これを行うより良い方法を提案できますか?

答えて

1

次のコードスニペットを試すことができます。 predは常に非空になります考慮

NSArray *predArray = @[pred]; // considering pred is non optional. 
if (rangeQuery!=nil) 
    predArray = [predArray arrayByAddingObject:rangeQuery]; 
if (fieldQuery!=nil) 
    predArray = [predArray arrayByAddingObject:fieldQuery]; 

は常にpredArrayになります。

+0

ありがとうございました!私はNSArrayでこれを行うことができたことを認識していない、このアプローチを取るためにNSMutableArrayである必要があると思った。 –

関連する問題