Я строю приложение в Swift, используя основные данные. Я использую задачу Entities с соответствующим атрибутом, который является Date. Мне нужно отсортировать задачи в соответствии с этой датой.Быстрая сортировка данных ядра по дате (а не только по времени)
Я попытался с помощью NSSortDescriptor с ключом из-за
NSSortDescriptor.init(key: "due", ascending: false)
Выпуск:
Он перебирает мои данные по времени только - не считая день/месяц/год
здесь является данные, полученные мной из моего запроса на выборку:
Optional(2017-02-06 03:29:18 +0000)
Optional(2017-02-08 03:29:27 +0000)
Optional(2017-02-07 03:29:38 +0000)
Optional(2017-02-08 03:30:29 +0000)
Как я могу сортировать его по тому, что приходит раньше? (Принимая во внимание весь NSDate не только время часть)
Я хочу, чтобы это было:
Optional(2017-02-06 03:29:18 +0000)
Optional(2017-02-07 03:29:38 +0000)
Optional(2017-02-08 03:29:27 +0000)
Optional(2017-02-08 03:30:29 +0000)
Полный код Все задачи выполнены в списке 0, и я звоню:
helper(showComp: true, sortBy: NSSortDescriptor.init(key: "due", ascending: false))
помощник FUNC:
func helper(showComp: Bool, sortBy: NSSortDescriptor?){
let g = cur as! Group
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Task")
let sortDescriptor0 = NSSortDescriptor.init(key: "completed", ascending: true)
let sortDescriptor = NSSortDescriptor.init(key: "index", ascending: true)
if sortBy == nil {
fetchRequest.sortDescriptors = [sortDescriptor0, sortDescriptor]
}else{
fetchRequest.sortDescriptors = [sortDescriptor0, sortBy!]
}
if (cur as! Group).name != "All"{
var predicate = NSPredicate(format: "group = %@", argumentArray: [g])
if !showComp {
predicate = NSPredicate(format: "group = %@ && completed = %@", argumentArray: [g, 0])
}
fetchRequest.predicate = predicate
}
do {
groups = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
Фотография основного атрибута данных
Можете ли вы показать фактический код? Потому что я не уверен, как предикат работает, как вы описываете. Кроме того, создаваемый вами 'NSSortDescriptor' указывает' возрастание: false', но даты, в которые вы хотите их, в порядке возрастания. –
Похоже, что ваше поле является типом 'String' в' CoreData', а не 'Date'. –
Обновлен мой вопрос. Я включил код @DaveWeston. – toiavalle