Meine Beziehung ist auf dem Bild unten gezeigt.CoreData Nach Beziehung sortieren
Ich mag Events von denen zuerst sortieren, die in der aktiven Förderung sind und dann nach Startdatum. Die Werbeaktion ist aktiv, wenn das aktuelle Datum zwischen dem Start- und Enddatum liegt. Leider kann ich aufgrund von CoreData keine transienten Eigenschaften zum Sortieren verwenden. In meinem Controller verwende ich keinen Abruf-Controller.
Gibt es eine Möglichkeit, das zu erreichen?
Update:
Ich habe folgende Art Deskriptoren:
// First is incorrect
[NSSortDescriptor(key: "promotion.start", ascending: false),
NSSortDescriptor(key: "start", ascending: true)]
Prädikate (Sie sind in Ordnung, obwohl):
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)
Und dies ist der Antrag (I verwende CoreStore, aber die Idee sollte klar sein):
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
}) ?? []
}
Ja. Aber wenn Sie mehr Hilfe benötigen, zeigen Sie etwas Code (und die Sprache, in der Sie es tun möchten). – sschale
Danke, ich benutze Swift, aber Sprache ist nicht wichtig für mich. Ich werde morgen meine Antwort mit einem einfachen Code aktualisieren. – apetrov
Was funktioniert nicht? – Fogmeister