2015-05-28 13 views
7

Próbuję filtrować główne obiekty danych w zależności od atrybutu daty.Deskryptor sortowania danych rdzenia z NSDate, iOS ze Swiftem

To jest mój bieżący kod:

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

Ale pojawia się błąd w wierszu:

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

Jak należy zmienić ten deskryptor sortowania, aby uzyskać obiekty, które mają starsze lub nowsze Data w atrybucie "timeStamp"?

Dziękuję.

Odpowiedz

25

Aby sprowadzić wszystkich obiektów spełniających pewne warunki nie trzeba deskryptor sortowania lecz orzecznik, na przykład:

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

Trzeba deskryptor sortowania aby obiekty w określonym porządek np

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

Dziękuję @MartinR, działa tak, jak chcesz. – mvasco

+0

¿Jak zmienić określoną kolejność (deskryptor sortowania) i odświeżyć NSFetchedResultsController, aby wyświetlić wyniki? – Markus

3

Swift 3,0 To działa bez problemu dla mnie

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