Мои отношения показаны на рисунке ниже.CoreData Сортировать по соотношению
Я хотел бы сортировать события сначала те, которые находятся в активном продвижении, а затем по дате начала. Акция активна, если текущая дата находится между датой начала и окончания. К сожалению, из-за CoreData я не могу использовать переходные свойства для сортировки. В моем контроллере я не использую контроллер выборки.
Есть ли способ достичь этого?
Обновление:
Я после сортировки Дескрипторы:
// First is incorrect
[NSSortDescriptor(key: "promotion.start", ascending: false),
NSSortDescriptor(key: "start", ascending: true)]
Предикаты (Они в порядке, хотя):
let promotionsPredicate =
NSPredicate(format: "(%@ >= promotion.start && %@ <= promotion.end) && " +
"(ANY promotion.cities.id == %@)", NSDate(), NSDate(), objectID)
let eventsPredicate =
NSPredicate(format: "start >= %@ && venue.city.id == %@",
NSDate(), objectID)
let subpredicates = [eventsPredicate, promotionsPredicate]
let compoundPredicate NSCompoundPredicate(orPredicateWithSubpredicates: subpredicates)
И это Request (I используя концепцию CoreStore, но идея должна быть ясной):
class func pagedEventsForPredicateSortedByInPromoAndStartDate(predicate: NSPredicate,
descriptors: [NSSortDescriptor],
fetchOffset: Int,
fetchLimit: Int) -> [Event] {
return CoreStore.fetchAll(From(Event),
Where(predicate),
OrderBy(descriptors),
Tweak { (fetchRequest) -> Void in
fetchRequest.fetchOffset = fetchOffset
fetchRequest.fetchLimit = fetchLimit
fetchRequest.returnsObjectsAsFaults = false
}) ?? []
}
Да. Но если вам нужна дополнительная помощь, покажите код (и язык, на котором вы хотите это сделать). – sschale
Спасибо, я использую Swift, но язык для меня не важен. Завтра я обновляю свой ответ простым кодом. – apetrov
Что не работает? – Fogmeister