У меня есть 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)
}
}
Я посмотрел вокруг переполнения стека и другие сайты о добавлении в массивы, но по какой-то причине не могут понять, почему я не могу добавить массив в другой класс.