从核心数据 - Swift4按日期排序TableView

时间:2017-11-18 19:18:31

标签: ios swift uitableview sorting core-data

我试图按日期对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
}

我尝试过在stackoverflow上找到的东西,如

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

但是我没有让它发挥作用..我对Swift / Programming很安静,所以如果有人可以帮助我那里。我认为它是我的"阵列设计的原因"

3 个答案:

答案 0 :(得分:1)

您可以获取数据并对生成的数组进行排序。但是,既然您正在使用Core Data,那么您可以告诉Core Data首先为您提供一个排序数组。在获取请求上使用排序描述符。对于您的财产aDatum,您可以使用

之类的内容
let sortDescriptor = NSSortDescriptor(key: "aDatum", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]

然后,当您进行提取时,生成的数组将按aDatum排序。

答案 1 :(得分:0)

你可以这样做:

let sortedMeetingData = meetingData.sorted{ $0.meetingDate < $1.meetingDate }

答案 2 :(得分:0)

感谢Moe,快速回答。那是我现在的解决方案。

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

let sort = sortedData[indexPath.row]

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

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