代码之家  ›  专栏  ›  技术社区  ›  Lern2LveWithIt

在CoreData Swift 4中按Bool属性对提取结果排序

  •  1
  • Lern2LveWithIt  · 技术社区  · 6 年前

    我正在创建待办事项列表应用程序,并希望按优先级对tableviewcontroller进行排序。如果任务很重要,我希望它位于待办事项列表的顶部,如果它不重要,我希望它位于重要任务的下方/之后。我一直在试图找出如何对其进行排序,但一直未能解决。感谢您的帮助。

    class ToDoTableViewController: UITableViewController {
    
    var toDos : [ToDoCoreData] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    }
    
    override func viewWillAppear(_ animated: Bool) {
        getToDos()
    }
    
    func getToDos() {
        if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext{
    
            if let coreDataToDos = try? context.fetch(ToDoCoreData.fetchRequest()) as? [ToDoCoreData] {
                if let theToDos = coreDataToDos {
                    toDos = theToDos
                    tableView.reloadData()
                }
            }
        }
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
    
        let toDo = toDos[indexPath.row]
    
        if let name = toDo.name {
    
            if toDo.important {
                cell.textLabel?.text = "❗️" + name
            } else {
                cell.textLabel?.text = toDo.name
            }
        }
        return cell
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Aleksandr Honcharov    6 年前

    使现代化 getToDos() 功能如下:

    func getToDos() {
        if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext{
    
            let fetchRequest: NSFetchRequest<ToDoCoreData> = ToDoCoreData.fetchRequest()
            let descriptors = [NSSortDescriptor(key: "important", ascending: true)] // try true/false
    
            fetchRequest.sortDescriptors = descriptors
    
            if let coreDataToDos = try? context.fetch(fetchRequest) {
                if let theToDos = coreDataToDos {
                    toDos = theToDos
                    tableView.reloadData()
                }
            }
        }
    }