У меня есть функция:
open func getAllCarsCount(from garages: [Garage], with categories: Set<Category> = []) -> Int {
var returnCount = 0
let context = DBContext.defaultContext
var predicates = [NSPredicate]()
for category in categories {
let predicate = NSPredicate(format: "SUBQUERY(carHasCategories, $c, $c.categoryName == %@ ).@count > 0", category.categoryName)
predicates.append(predicate)
}
for garage in garage {
let predicate = NSPredicate(format: "garageNbr = \(garage.garageNbr) AND active = 1" )
predicates.append(predicate)
}
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Car")
request.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)
do {
let count = try context.count(for: request)
returnCount += count
} catch let error as NSError {
print("Could not get all cars count. ", error.localizedDescription)
}
return returnCount
}
, в которой я пытаюсь получить количество автомобилей с одним из указанных categories
.Но мне нужно объединить 2 предиката.Итак, что я хочу:
Чтобы получить ВСЕ автомобили, подсчитанные из заданного массива garages
, в котором они active
, garageNbr
совпадают И имеет одну из указанных категорий.В настоящее время мой код не работает правильно, и я был бы очень признателен, если бы кто-нибудь мог помочь мне с этим
Структура базы данных выглядит следующим образом:
Garage
: garageNbr
, name
, active
Car
: name
Category
: categoryName
И они имеют отношения:
Garage
: отношения: garageHasCars
Назначение: Car
Обратное: carInGarage
Car
: Отношение: carInGarage
Назначение: Garage
Обратное: garageHasCars
Relationship: `carHasCategories`
Destination: `Category`
Inverse: `categoryHasCars`
Category
: Отношения: categoryHasCars
Направление: Car
Обратное: carHasCategories