NSArray для NSCompoundPredicate с несколькими необязательными значениями в Objective-C

У меня есть запрос CoreData с базовым предикатом pred и одним необязательным предикатом fieldQuery.

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

Я бы хотел, чтобы и fieldQuery, и 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. Вы можете предложить лучший способ сделать это?

# core-data
Источник
Codelisting
за 1 против
Лучший ответ

Вы можете попробовать нижеприведенный фрагмент кода.

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

учитываяpred всегда будет непусто всегда будет вpredArray .

  • 0
    Спасибо! Не понимал, что могу сделать это с помощью NSArray, думал, что это должен быть NSMutableArray, чтобы использовать этот подход.
Codelisting
Популярные категории
На заметку программисту