【发布时间】:2020-05-03 06:41:45
【问题描述】:
我有一个在单元格中显示条目列表的 TableView。这些条目存储在一个数组中。用户在另一个视图控制器(模式)中为条目输入文本,点击“保存”,在.reloadData() 之后,新条目应附加到数组并显示在 TableView 中。该数组位于HomeController 中。
为了查明问题可能出在哪里,我尝试在HomeController 中附加一些文本,然后从NotesController 附加到同一个数组。在后者中,当我打印homeController.entryInput 时,我期待["hello", "goodbye"]。相反,我只得到["goodbye"]。
另外,当我再次点击NotesController 中的“保存”时,我再次得到["goodbye"] 而不是["goodbye", "goodbye"]。所以看起来数组被覆盖了。
我还尝试将项目硬编码到数组中,它们在 TableView 中显示良好。当我从NotesController 追加一个项目时,它会追加到数组但不会显示在 TableView 上,当我从同一个 ViewController 添加另一个项目时,它会覆盖我附加的第一个项目,而不是将其添加为新项目.
HomeController:
class HomeController: UIViewController {
let tableView = UITableView()
var entryInput: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
}
func setupTableView() {
tableView.delegate = self
tableView.dataSource = self
self.entryInput.append("hello")
print(entryInput)
tableView.register(HomeCell.self, forCellReuseIdentifier: reuseIdentifier)
let height = view.frame.height
tableView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: height)
tableView.backgroundColor = .white
view.addSubview(tableView)
}
extension HomeController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return entryInput.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! HomeCell
cell.entryTextLabel.text = entryInput[indexPath.row]
return cell
}
NotesController:
class NotesController: UIViewController {
let homeController = HomeController()
...
let saveBtn = UIView().navigationBtn(text: "Save")
let homeController = HomeController()override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
saveBtn.addTarget(self, action: #selector(save(sender:)), for: .touchUpInside)
}
@objc func save(sender: UIButton) {
homeController.entryInput.append("goodbye")
homeController.tableView.reloadData()
print(homeController.entryInput)
dismiss(animated: true, completion: nil)
}
}
我查看了 Stack Overflow 和其他有关附加到数组的网站,但由于某种原因,我似乎无法弄清楚为什么我不能附加到另一个类中的数组。
【问题讨论】:
-
在 HomeController 类的 viewDidLoad 中添加 log 并检查它是否被调用。
-
可能是你有多个 HomeViewController。因此,当您从 NotesController 将数据附加到 HomeViewController 时,它是一个新实例。 NotesController 是您说的主要 VC 还是 modal?
标签: arrays swift uitableview viewcontroller