从核心数据中按日期对 TableView 进行排序 - Swift4

Posted

技术标签:

【中文标题】从核心数据中按日期对 TableView 进行排序 - Swift4【英文标题】:Sort TableView by Date from core Data - Swift4 【发布时间】:2017-11-18 19:18:31 【问题描述】:

我正在尝试按日期对 UITableView 进行排序,这来自核心数据。

从核心数据中获取数据

func getData() 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    do 
    tasks = try context.fetch(Task.fetchRequest())
    
    catch
        print("Fetching Failed")
    

提供数据

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! CustomTableViewCell

    let task = tasks[indexPath.row]


    let dateRangeStart = Date()
    let dateRangeEnd = task.Datum
    let components = Calendar.current.dateComponents([.year, .weekOfYear, .month, .day], from: dateRangeStart, to: dateRangeEnd!)


    cell.name.text = task.name
    cell.dayLeft.text = "\(components.month ?? 0)M \(components.weekOfYear ?? 0)W \(components.day ?? 0)D"

    return cell

我尝试了我在 *** 上找到的东西,比如

meetingsData.sort( $0.meetingDate.compare($1.meetingDate) == .OrderedAscending )

但我没有让它工作。我对 Swift/Programming 很陌生,所以如果有人可以帮助我的话。我认为这是我的“阵列设计”的原因

【问题讨论】:

【参考方案1】:

您可以获取数据并对结果数组进行排序。但是由于你使用的是 Core Data,你可以告诉 Core Data 首先给你一个排序数组。在您的获取请求上使用排序描述符。对于您的财产aDatum,您可以使用类似

let sortDescriptor = NSSortDescriptor(key: "aDatum", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]

然后,当您进行 fetch 时,结果数组将已经按 aDatum 排序。

【讨论】:

我不知道如何使用fetchRequest.sortDescriptors = [sortDescriptor] NSFetchRequest 有一个具有该名称的属性,其值可以是NSSortDescriptor 的数组。如果你给它一个值,那么你的获取结果将使用你提供的键进行排序。 所以我得到了这样的结果:link 但它没有排序。抱歉图片链接。【参考方案2】:

感谢 Moe 的快速解答。这就是我现在的解决方案。

let sortedData = tasks.sorted $0.aDatum! < $1.aDatum! 

let sort = sortedData[indexPath.row]

现在数组按日期排序 - 给出数据:

cell.name.text = sort.name
cell.lable.text = sort.lable
....

【讨论】:

以上是关于从核心数据中按日期对 TableView 进行排序 - Swift4的主要内容,如果未能解决你的问题,请参考以下文章

在python中按日期时间对字典列表进行排序

核心数据:在一对多关系中按日期属性排序

核心数据按格式化日期排序表格视图

在 Objective-C 中按评论数量对核心数据中的 FetchedObjects 数组进行排序

如何在飞镖/颤振中按日期对列表进行排序/排序?

在 Python 中按日期对 CSV 进行排序