UITableView不会重新加载数据

时间:2017-08-08 18:14:49

标签: swift uitableview tableview reloaddata

我有一个填充tableview的数组,当我运行应用程序时,它运行正常。

我使用PickerView创建了一个弹出框,以选择一个选项来对TableView数据进行排序。

我让用户在popover中选择,将其传递给主ViewController,对数据进行排序并调用tableview.reloadData()但没有任何反应。

我在排序后打印了数组,数组已经排序,但我看不到变化。

但是,如果我去其他ViewController并返回,数据会被更改。

为什么在我致电tableview.reloadData()时未显示更改。

以下是代码:

var dataModel = DataModel()
var ordenacao = String()

override func viewWillAppear(_ animated: Bool) {

    dataModel.loadData()
    tableView.reloadData()
}

override func viewDidLoad() {
    super.viewDidLoad()

    ordenadados(ordem: ordenacao)
    tableView.reloadData()
}

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier")       
    cell.textLabel?.text = dataModel.notas[indexPath.row].titulo
    cell.detailTextLabel?.text = dataModel.notas[indexPath.row].datafinal

    print("Ordena Tableview")

    for nota in dataModel.notas {
        print (nota.titulo ?? "")
    }

    return cell
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dataModel.notas.count
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    dataModel.notas.remove(at: indexPath.row)

    self.tableView.deleteRows(at: [indexPath as IndexPath], with: UITableViewRowAnimation.fade)
    dataModel.saveData()
}

编辑:

func ordenadados(ordem: String){

    dataModel.loadData()

    if(ordenacao == "Titulo Asc."){
        print("Titulo Asc")
        dataModel.notas.sort { $0.titulo! < $1.titulo! }
    }else if(ordenacao == "Titulo Desc."){
        print("Titulo Desc.")
        dataModel.notas.sort { $0.titulo! > $1.titulo! }
    }

    dataModel.saveData()

    for nota in dataModel.notas {

        print (nota.titulo ?? "")

    }
    dataModel.loadData()
    tableView.reloadData()

}

在输出中,数组已排序,但在TableView中没有任何更改。 enter image description here

保存并加载数据方法:

 //save data
func saveData() {
    let data = NSMutableData()
    let archiver = NSKeyedArchiver(forWritingWith: data)
    archiver.encode(notas, forKey: "teste")
    archiver.finishEncoding()
    data.write(toFile: dataFilePath(), atomically: true)
}

//read data
func loadData() {
    let path = self.dataFilePath()
    let defaultManager = FileManager()
    if defaultManager.fileExists(atPath: path) {
        let url = URL(fileURLWithPath: path)
        let data = try! Data(contentsOf: url)
        let unarchiver = NSKeyedUnarchiver(forReadingWith: data)
        notas = unarchiver.decodeObject(forKey: "teste") as! Array
        unarchiver.finishDecoding()
    }
}

0 个答案:

没有答案