【问题标题】:Reload data tableview in swift快速重新加载数据表视图
【发布时间】:2015-06-01 20:59:13
【问题描述】:

当我在 UITableViewController 中运行 tableView.reloadData() 时,它可以工作,但是当我调用一个函数从另一个控制器更新此 tableview 时,它不起作用。

//这种方式正常工作

func reloadTableView() {

    let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true ).first as String
    let db = Database("\(path)/db.sqlite");

    conversasArray.removeAll(keepCapacity: true);

    let stmt = db.prepare("SELECT ZNOME,ZUlTIMAMSG,ZIDMENSAGEM,ZIMAGE FROM ZUSUARIO,ZCHAT WHERE ZTELEFONE = ZTO")
    var objetoConversa : AnyObject = [];

    for row in stmt {
        objetoConversa = ["ZNOME":"\(row[0]!)", "ZUlTIMAMSG":"\(row[1]!)", "ZIDMENSAGEM":"\(row[2]!)", "ZIMAGE":"\(row[3]!)"];
        //Adiciona o objeto dentro do array de objetos.
        conversasArray.append(objetoConversa)
    }
    tableView.reloadData();

}

//但是当我这样做时,另一个文件 tableView.reloadData() 不起作用。

var a = TableViewController();

a.reloadTableView();

【问题讨论】:

  • 因为var a = TableViewController() 创建了一个新的、完全不相关的表格视图控制器实例......你认为它做了什么?
  • 检查这个问题/答案:stackoverflow.com/questions/25921623/…
  • 本以为会带上当前的TableViewController()实例,我是新手,还在学习SWIFT编程,谢谢解决。

标签: swift


【解决方案1】:

在重新加载 tableview 时使用 tableview 的保存实例。

并且还在主线程中重新加载 tableview。

扩展 UITableView {

/// Reload TableView in main thread

func reloadInMainThread() {

    DispatchQueue.main.async {

        self.reloadData()

    }
}

}

【讨论】:

  • 虽然在这种情况下这不是问题,因为没有使用单独的线程。
  • 检查表视图是否与您拥有的实例相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多