2015-05-28 4 views
7

Sto tentando di filtrare gli oggetti di dati di base in base a un attributo di data.Descrittore di ordinamento dei dati principali con NSDate, iOS con Swift

Questo è il mio codice corrente:

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) 
} 

ma ottengo un errore alla riga:

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

Come dovrei cambiare questo descrittore tipo per ottenere gli oggetti che hanno un età superiore o una più recente data sull'attributo "timeStamp"?

Grazie.

risposta

25

per andare a prendere tutti gli oggetti che soddisfa una certa condizione non è necessario un descrittore sorta, ma un predicato, ad esempio:

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

È necessario un descrittore sorta per ottenere gli oggetti in un determinato ordine, ad esempio:

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

Grazie @MartinR, funziona come si propone. – mvasco

+0

¿Come modificare l'ordine specificato (descrittore di ordinamento) e aggiornare NSFetchedResultsController per mostrare i risultati? – Markus

3

Swift 3.0 Questo funziona senza problemi per me

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