2015-05-28 5 views
7

Ich versuche, Kerndatenobjekte abhängig von einem Datumsattribut zu filtern.Core Data Sortierdeskriptor mit NSDate, iOS mit Swift

Dies ist meine aktuellen Code:

func getFetchedResultController(selectedEntity: NSString){ 

    let appDelegate : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let managedObjectContext: NSManagedObjectContext = appDelegate.managedObjectContext! 

    let fetchRequest = NSFetchRequest() 

    let entity = NSEntityDescription.entityForName(selectedEntity as String, inManagedObjectContext: managedObjectContext) 

    fetchRequest.entity = entity 

    fetchRequest.fetchBatchSize = 20 

    let date = NSDate() 

    let sectionSortDescriptor = NSSortDescriptor(key: "timeStamp < %@",date) 

    let sortDescriptors = [sectionSortDescriptor] //, secondSortDescriptor] 

    fetchRequest.sortDescriptors = sortDescriptors 

    let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 

    aFetchedResultsController.delegate = self 
    self.fetchedResultsController = aFetchedResultsController 

    var error: NSError? = nil 
    if !self.fetchedResultsController.performFetch(&error) { 
     abort() 
    } 

print(fetchedResultsController.fetchedObjects?.count ?? 0) 
} 

Aber ich erhalte eine Fehlermeldung in Zeile:

let sectionSortDescriptor = NSSortDescriptor(key: "timeStamp < %@",date) 

Wie soll ich diese Art Descriptor ändern, um die Objekte zu erhalten, die eine ältere oder neuere haben Datum auf dem Attribut "timeStamp"?

Vielen Dank.

Antwort

25

Um alle Objekte erfüllen eine Bedingung holen Sie einen Descriptor Art nicht brauchen, aber ein Prädikat, zum Beispiel:

let predicate = NSPredicate(format: "timeStamp < %@", date) 
fetchRequest.predicate = predicate 

Sie benötigen einen Art Descriptor die Objekte in einem bestimmten zu erhalten bestellen, zum Beispiel:

let sectionSortDescriptor = NSSortDescriptor(key: "timeStamp", ascending: true) 
let sortDescriptors = [sectionSortDescriptor] 
fetchRequest.sortDescriptors = sortDescriptors 
+0

Vielen Dank @MartinR, es funktioniert, wie Sie vorschlagen. – mvasco

+0

¿Wie ändere ich die angegebene Reihenfolge (Sortierdeskriptor) und aktualisiere NSFetchedResultsController, um die Ergebnisse anzuzeigen? – Markus

3

Swift 3.0 Dies funktioniert mit kein Problem für mich

let fec:NSFetchRequest = YourEntity.fetchRequest() 
let sortDescriptor = NSSortDescriptor(key: "type", ascending: true) 
fec.sortDescriptors = [sortDescriptor] 
let items = try! context.fetch(fec)