UITableView第一行' 0'不会更新表重新加载 - 所有其他人吗?

时间:2017-03-16 21:51:48

标签: ios swift uitableview realm

我有一个带嵌入式UITableView的视图应用程序,它显示" store"(Realm对象)列表。默认情况下,我填充所有Store对象的表视图。如果用户想要缩小结果,他们可以通过使用MasterVC中的任何文本字段组合来实现。当他们点击搜索时 - 只需更新 TableView并使用'过滤'领域对象。

什么有效:

  • 使用Realm中的对象填充UITableView。
  • 通过MasterVC中的文本字段条目创建新的Realm条目,并在ResultsVC中重新填充表。
  • 滑动以删除表/和Realm对象上的对象。

什么样的作品:

  • 如果用户输入搜索字词,则“过滤”' Realm对象(Stores)并重新填充表。这会正确地重新加载并返回结果数。 然而 TableView的 First Cell(0) 始终完全相同且永不更新..如果搜索中有20个返回的结果然后正确显示第1-18行。第0行是静态的,永远不会更改其文本。有什么明显的原因吗?

结果表视图控制器

class ResultsVC: UITableViewController {

    // data source
    var stores: Results<Store> = {
        let realm = try! Realm()
        return realm.objects(Store.self)
    }()

    var token: NotificationToken?

    ...

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! ResultsCustomViewCell

        let stores = realm.objects(Store.self)
        let currentStore = stores[indexPath.row]
        cell.storeNumber.text = "#\(currentStore.storeNumber)"
        cell.storeName.text = "\"\(currentStore.storeName)\""
        return cell
    }
}

以下是我如何从 MasterVC

访问 ResultsVC

主视图控制器

class MasterViewController: UIViewController {
    ...
    @IBAction func searchDatabase(_ sender: Any) {
        let CVC = childViewControllers.first as! UINavigationController
        let resultVC = CVC.viewControllers[0] as? ResultsVC
        result.stores = stores.filter("address = '1234 Blue Street'")
        result.tableView.reloadData()
    }
    ...
}

1 个答案:

答案 0 :(得分:1)

原来我有一个重复的变量,它覆盖了上面的原点。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! ResultsCustomViewCell

    let stores = realm.objects(Store.self) // <- OVERWRITING ORIGINAL //
    let currentStore = stores[indexPath.row]
    cell.storeNumber.text = "#\(currentStore.storeNumber)"
    cell.storeName.text = "\"\(currentStore.storeName)\""
    return cell
}