2016-05-11 8 views
0

Ich schreibe eine Kosten-Tracker App und das ist Modell meine Daten gegeben zurückzukehren:Wie NSFetchedResultsController verwenden insgesamt einer Beziehung Eigenschaft ein Prädikat

enter image description here

In einem Bildschirm, wo ich eine periodische zeigen (zB täglich) Zusammenfassung der Ausgaben, ich möchte eine NSFetchedResultsController verwenden, um alle Kategorien und die Summen ihrer Ausgaben für jede einzelne Periode (zB jeden Tag) zu holen. Eine Periode wird durch zwei NSDate Variablen definiert - eine startDate und eine endDate, weil ich auch wöchentliche und monatliche Ansichten habe - was meiner Meinung nach vom Index der Zusammenfassung in der NSFetchedResultsController abhängig sein sollte. Ich möchte auch die NSFetchedResultsController die Kategorie zurückgeben, auch wenn die Summe Null ist. Ich weiß nicht, wie ich das einrichten soll.

Was ich versucht habe: Ich habe erfolgreich ein NSFetchedResultsController auf meiner Category Einheit gebaut und verwendet, um ein NSExpressionDescription die Summe seiner expenses Beziehung zu bekommen, aber es summiert alle Kosten, und ich kann nicht einen Weg zu spezifizieren eine finden inklusive Zeitraum

let request = NSFetchRequest(entityName: Category.entityName) 
request.resultType = .DictionaryResultType 
request.propertiesToFetch = [ 
    "name", "color", 
    { 
     let totalColumn = NSExpressionDescription() 
     totalColumn.name = "total" 
     totalColumn.expression = NSExpression(format: "@sum.expenses.amount") 
     totalColumn.expressionResultType = .DecimalAttributeType 
     return totalColumn 
    }() 
] 
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)] 
let fetcher = NSFetchedResultsController(fetchRequest: request, managedObjectContext: App.state.mainQueueContext, sectionNameKeyPath: nil, cacheName: nil) 

Ich habe auch über geholt Eigenschaften gelesen, aber ich kann auch nicht einen Weg finden, die startDate und endDate im Prädikat vor dem NSFetchedResultsController Feuer, um anzuzeigen, die holen. Hilfe?

+0

Gibt es einen Grund für 'NSFetchedResultsController' mit? Ich glaube nicht, dass es in der Lage ist, zu liefern, was Sie wollen (zumindest nicht ohne viel Arbeit). Es könnte für einen einzelnen Zeitraum (Tag, Woche, usw.) möglich sein, aber Sie brauchen * jeden * einzelnen Zeitraum. Sie müssten das Prädikat neu erstellen und den Abruf für jede Periode wiederholen. Es ist möglicherweise einfacher, einfach alle Ausgaben zu durchlaufen und den Gesamtbetrag für jede Kombination aus Kategorie und Zeitraum zu berechnen. – pbasdf

Antwort

0

Sie können ein Prädikat zu Ihrer Abrufanforderung hinzu:

request.predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", startDate, endDate]; 
Verwandte Themen