2017-02-06 1 views
0

Я строю приложение в 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)") 
} 

Фотография основного атрибута данных enter image description here

+0

Можете ли вы показать фактический код? Потому что я не уверен, как предикат работает, как вы описываете. Кроме того, создаваемый вами 'NSSortDescriptor' указывает' возрастание: false', но даты, в которые вы хотите их, в порядке возрастания. –

+0

Похоже, что ваше поле является типом 'String' в' CoreData', а не 'Date'. –

+0

Обновлен мой вопрос. Я включил код @DaveWeston. – toiavalle

ответ

1

Swift 3

var sdSortDate = NSSortDescriptor.init(key: "date", ascending: false) 
fr.sortDescriptors = [sdSortDate] 
let result4 = try! context.fetch(fr) 

я тестировал его в Swift 3, работает хорошо

[<NSManagedObject: 0x618000089060> (entity: CoreDate; id: 0x61800002c460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p3> ; data: { 
    date = "2017-02-09 21:35:19 +0000"; 
}), <NSManagedObject: 0x61800008b680> (entity: CoreDate; id: 0x60000002c140 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p1> ; data: { 
    date = "2017-02-06 04:41:59 +0000"; 
}), <NSManagedObject: 0x60800008c080> (entity: CoreDate; id: 0x60800002d460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p2> ; data: { 
    date = "2017-02-17 18:28:39 +0000"; 
})] 

After sort 

[<NSManagedObject: 0x61800008b680> (entity: CoreDate; id: 0x60000002c140 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p1> ; data: { 
    date = "2017-02-06 04:41:59 +0000"; 
}), <NSManagedObject: 0x618000089060> (entity: CoreDate; id: 0x61800002c460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p3> ; data: { 
    date = "2017-02-09 21:35:19 +0000"; 
}), <NSManagedObject: 0x60800008c080> (entity: CoreDate; id: 0x60800002d460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p2> ; data: { 
    date = "2017-02-17 18:28:39 +0000"; 
})] 
+0

- атрибут даты типа Date? или String? – toiavalle

+0

Тип атрибута даты - дата –

Смежные вопросы