2016-07-14 9 views
0

Ich habe Event Modell mit startDate und endDate. Ich möchte dieses Ereignis in 3 Kategorien einteilen.Zeitbasierte transiente Eigenschaft mit NSFetchedResultsController verwenden

  • Aktuell: startdate < heute < endDate
  • In Kürze: heute < startdate
  • Past: endDate < heute

ich eine vorübergehende Eigenschaft namens gemacht status oben Logik enthalten, und verwenden Sie diese als Parameter in NSFetchedResultsController

NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: "status", cacheName: nil)

Wenn ich laufe, bekam ich diesen Fehler und sagte mir, dass ich Abschnitt als Sortierung verwenden sollte.

Dann habe ich dies im Sortierungsdeskriptor gesetzt und diesen Fehler bekommen, da transient nicht als Sortierungsdeskriptor verwendet werden kann.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath status not found in entity '

Das Problem ist dieser Abschnitt von 2 Eigenschaften bestimmen ist, so kann es nicht Art sein, indem nur startDate oder endDate, aber beide.

Was ist der beste Weg, um dieses Problem zu lösen? Ich habe darüber nachgedacht, diesen Status nicht-transient zu machen, aber dieser Wert wird täglich aktualisiert, ich finde es irgendwie komisch, ihn nicht-flüchtig zu machen.

Antwort

0

NSFetchedResultsController kann nicht nach einer vorübergehenden Eigenschaft sortiert werden, wenn sie von SQLite unterstützt wird (was der übliche Fall ist). Das Back-End muss Ihre Sortieranforderung in eine SQL-Abfrage umwandeln, und die Abfrage hat keinen Zugriff auf vorübergehende Eigenschaften. Entweder müssen Sie den Status nicht vorübergehend ändern oder Sie können NSFetchedResultsController dafür nicht verwenden.

Siehe die Core Data Programming Guide: Advanced Topics: Fetch Predicates and Sort Descriptors für mehr.

In addition you cannot sort on transient properties using the SQLite store.

Verwandte Themen