Сохранение данных в UITableview - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть приложение, с помощью которого пользователь может добавлять книги в список избранного, заполняя таблицу. Подробная информация о книге отображается в виде, и, нажав «избранное», выполняется переход к вводу информации об этой книге в ячейку табличного представления.

В настоящее время в таблице может появиться только одна книга, добавление новой книги приведет к удалению начальной записи (поэтому фактически используется только первая ячейка таблицы)

Is есть способ сохранить каждую запись в табличном представлении, так что в действительности создается список избранного

saveButton

 @IBAction func saveButton(_ sender: Any) {

        let bookFormat = formatLabel.text

        if (bookFormat!.isEmpty)
        {
            displayMyAlertMessage(userMessage: "Please Select a Book Format")
            return
        }
        else{

        self.performSegue(withIdentifier: "LibViewSegue", sender: self)
        }


    }

TableView

extension LibrarybookViewController: UITableViewDataSource, UITableViewDelegate{

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 115
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print(#function, dataSource.count)

        return dataSource.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->  UITableViewCell {
        print(#function, "indexPath", indexPath)
        guard let bookCell = tableView.dequeueReusableCell(withIdentifier: "libCell", for: indexPath) as? LibrarybookTableViewCell else {
            return UITableViewCell()
        }
        let libbook = dataSource[indexPath.row]




        bookCell.cellTitleLabel.text = libbook.title
        bookCell.cellReleaseLabel.text = libbook.release
        bookCell.cellFormatLabel.text = bookFormat




        return bookCell
    }

Я читал о значениях по умолчанию и CoreData, но я не уверен, должно ли это быть реализовано в действии кнопки segue или в функциях просмотра таблицы?

1 Ответ

0 голосов
/ 18 апреля 2020

Я вижу, у вас есть массив dataSource, который содержит список книг. В самом простом случае вы можете просто добавить данные в ваш источник данных, а затем перезагрузить свой UITableView. Но если вам нужно постоянное хранилище, вы можете обратиться к локальным решениям БД, таким как SQLite, CoreData или Realm. Тогда нужно просто сохранить -> получить данные -> отобразить в UITableView.

Общая идея заключается в нажатии кнопки добавления (или любого прослушивателя событий, к которому вы хотите присоединить действие), сохраните его. в постоянное хранилище перезагрузите ваш tableView, так как источник данных из постоянного хранилища, он обновится автоматически. Предположим, вы загружаете данные из постоянного хранилища.

Кроме того, не храните ваш массив в UserDefaults, он предназначен для данных размером в кусочки для таких вещей, как сеанс пользователя и т. Д. c.

Редактировать: как @ Leo Dabus отметьте, вы можете вставить строку без перезагрузки tableView, используя

let index = IndexPath(row: items.count - 1, section: 0) // replace row with position you want to insert to.
tableView.beginUpdates()
tableView.insertRows(at: [index], with: .automatic)
tableView.endUpdates()
...