2016-07-08 23 views
1

Ich habe Code geschrieben, der Ereignisse aus Core Data filtert und nur die Ereignisse ausgibt, die ein Datumsattribut haben, das einem Datum entspricht, das in einem Kalender ausgewählt wurde. Heres der Code:Anzeigen von Daten in einer Tabellenansicht aus einem gefilterten Array

Dies funktioniert und es, dass die Daten filtert, wie ich möchte und druckt nur die Ereignisse, die ich will. Das Problem ist, dass ich nicht weiß, wie diese Daten in der TableView angezeigt werden. Normalerweise kann ich alle Daten von Core Data in der Tableview wie dies in cellForRowAtIndexPath anzuzeigen ...

let ePast = eventsPast[indexPath.row] 
let cellPast = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell 

// Sets labels in cell to whatever user typed in on the events page 
cellPast.titlePrototypeCell!.text = ePast.eventPastTitle! 
cellPast.datePrototypeCell!.text = "Date: " + ePast.eventPastDateLabel! 

return cellPast 

... aber ich bin nicht sicher, wie die neuen Daten als Array zuzugreifen, wie ich oben tat. Irgendwelche Ideen?

+0

Das ist Swift! Verwenden Sie native Swift-Funktionen wie 'filter' und nicht 'NSArray' und' NSPredate'. Weisen Sie das Ergebnis der Filteroperation dem Datenquellenarray zu. – vadian

+0

Wenn Sie die Chance haben, könnten Sie vielleicht ein Beispiel geben? Ich habe überall nachgesehen und dies ist der einzige Weg, der mit Core Data zu arbeiten scheint. –

+0

Der beste Weg, um gefilterte Daten von Core Data zu erhalten, ist ein Prädikat, das einer Abrufanforderung zugewiesen ist. Es gibt Tausende von Beispielen hier auf SO sowie Beispielcode in der Core Data-Dokumentation, wie man das macht. – vadian

Antwort

1

Sie werden ein zweites Array in Ihrer Klasse haben. Wenn kein Filter vorhanden ist, sind die beiden Arrays identisch. Wenn es einen Filter gibt, dann haben Sie ein Master-Array mit absolut allem und das gefilterte Array ist eine kleine Teilmenge.

(class var) myFilteredArray = (eventsPast as NSArray).filteredArrayUsingPredicate(predicate) 

Dann in Ihrer Tableview Methode:

let ePast = myFilteredArray[indexPath.row] 

Und stellen Sie sicher, dass die Tabellenzeile Größe gefilterten Array Zahl setzen, nicht die Haupt-Gruppe zählen. Andernfalls werden Sie Abstürze aus dem Rahmen bekommen.

+0

Ich erhalte einen Fehler: Wert des Typs 'AnyObject' hat kein Mitglied 'eventPastTitle' –

+0

Ihre Filterfunktion gibt ein Array von 'AnyObject' zurück. Wirf es in die Klasse, die du kennst, und mach weiter mit dem Leben. – Putz1103

Verwandte Themen