视图控制器不刷新

时间:2017-10-22 03:27:08

标签: ios swift xcode firebase-realtime-database tableview

我有一个带有集合视图的视图控制器,当用户单击该单元格时,该应用程序将进入视图控制器,该视图控制器具有用户拥有的所有帖子的表格视图。

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "userprofile" {
let vc = segue.destination as! UsersProfileViewController
     let postsForUser: [[String: Any]] = posts.filter {
                        guard let post = $0 as? [String : Any] else {
                            return false
                        }
                        return post["uid"] as? String == uid
                        } as! [[String : Any]]
                    print("postForUser = \(postsForUser)")
                    vc.posts = postsForUser //vc.posts should be [[String: Any]]
                }}

在UsersProfileViewController中,单元格填充在CellForRowAt

 let post = self.posts![(indexPath?.row)!] as! [String: AnyObject]


        cell.Title.text = post["title"] as? String
        cell.Author.text = post["Author"] as? String
        cell.ISBN10.text = post["ISBN10"] as? String
        cell.ISBN13.text = post["ISBN13"] as? String
        cell.CoverType.text = post["CoverType"] as? String
        cell.Price.text = post["Price"] as? String

每次出现视图时,我都想重新加载表视图。

  override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = true
        let indexPath = self.selectedIndex

        let cell:ProfileTableViewCell? = TableView.cellForRow(at: indexPath! as IndexPath) as! ProfileTableViewCell        
        if(vcUserBook == true) // from EditPostViewController
        {


            let post = self.posts![(indexPath?.row)!] as! [String: AnyObject]

            cell?.Title.text = post["title"] as? String
            cell?.Author.text = post["Author"] as? String
            cell?.ISBN10.text = post["ISBN10"] as? String
            cell?.ISBN13.text = post["ISBN13"] as? String
            cell?.CoverType.text = post["CoverType"] as? String
            cell?.Price.text = post["Price"] as? String


        }

        }

但是当我运行它时,当我点击收集单元时应用程序崩溃。

2 个答案:

答案 0 :(得分:1)

您可以重新加载数据

override func viewWillAppear(_ animated: Bool) { self.navigationController?.isNavigationBarHidden = true
YourTableView.reloadData() }

答案 1 :(得分:1)

您无法像cell中那样发起viewWillAppear。 tableView还没有完成它的绘制,这就是你得到错误的原因。

viewWillAppear中的所有此部分都需要在cellForRowAt中完成:

let indexPath = self.selectedIndex
let cell:ProfileTableViewCell? = TableView.cellForRow(at: indexPath! as IndexPath) as! ProfileTableViewCell        
if(vcUserBook == true) // from EditPostViewController {
    let post = self.posts![(indexPath?.row)!] as! [String: AnyObject]

    cell?.Title.text = post["title"] as? String
    cell?.Author.text = post["Author"] as? String
    cell?.ISBN10.text = post["ISBN10"] as? String
    cell?.ISBN13.text = post["ISBN13"] as? String
    cell?.CoverType.text = post["CoverType"] as? String
    cell?.Price.text = post["Price"] as? String
}

viewWillAppear TableView.reloadData()中,您应该只cellForRowAt处理url: '/main-category/:id'中的单元格。