Как обновить значение основных данных в textField ячейки UITableView - PullRequest
0 голосов
/ 14 февраля 2019

Я настраиваю очень простую функцию приложения, такую ​​как список задач / блокнот, где пользователи добавляют пустую ячейку в UITableView.Ячейка будет содержать системное время, когда была создана строка заметки, и может вводить свою заметку в textField.

Мне удалось настроить приложение, добавив пустую ячейку со статическим системным временем и удерживая текстоднако в textField после многих поисков я просто не могу понять, как сохранить / сделать постоянным значение textFields после того, как пользователь закончил редактирование или добавляет новую ячейку заметки.

Я попытался изменить путьв котором я добавил ячейки в постоянный контейнер, однако это не сообщит приложению, какая ячейка обновляется, просто создайте новую.

Мне не разрешено публиковать изображение, поэтому вот мое описание: Это UITableView с панелью «Добавить» с правой стороны и ячейкой, содержащей UIlabel, содержащий (systemTime) слева и textField (noteLine), заполняющий правую часть ячейки.

|--------------------------------------|
|                 notepad            + |
|--------------------------------------|
|Prototype cell                        |
|--------------------------------------|
|12:17:12 |***textField***            ||
|                                      |
|                                      |
|                                      |
|                                      |
|                                      |
|                                      |
|                                      |
|                                      |
|______________________________________|

Мои Vars:

    var frc: NSFetchedResultsController = NSFetchedResultsController<NSFetchRequestResult>()
    var pc = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

Вот мой код, добавляющий новую «строку заметки»

func newNoteline() {
        let entityDescription = NSEntityDescription.entity(forEntityName: "Entity", in: pc)

        let item = Entity(entity: entityDescription!, insertInto: pc)

        item.notesheetLine = "Test"
        item.timenoteline = timeOutlet.text

        do {

            try pc.save()
        } catch {
            print(error)
            return
        }
        self.tableView.reloadData()

    }

Из этого я попыталсяследующее, чтобы сохранить, но это не работает - я предполагаю, потому что я не говорю приложению, какую ячейку обновлять.

    func save() {

            let entityDescription = NSEntityDescription.entity(forEntityName: "Entity", in: pc)

            let item = Entity(entity: entityDescription!, insertInto: pc)

            item.notesheetLine = "Test Save"


        do {

            try pc.save()
        } catch {
            print(error)
            return
        }
                self.tableView.reloadData()
    }

Я тоже пробовал это, но опять не повезло:

    func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) {
        let noteline = tableView.dequeueReusableCell(withIdentifier: "notelineIdentifier", for: indexPath!) as! notesheetTableViewCell

        let item = frc.object(at: indexPath!) as! Entity

        item.timeLine = noteline.timeLineOutlet.text

        do {

            try pc.save()
        } catch {
            print(error)
            return
        }
    }

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

Так что кто-то может избавить меня от моих страданий и сказать мне, что /если есть функция, позволяющая пользователю выбрать текстовое поле в ячейке, отредактируйте его, и как только пользователь закончит редактирование, он обновит значение coreData значением textField.

1 Ответ

0 голосов
/ 14 февраля 2019

NSManagedObject объекты относятся к ссылочному типу, подходящее решение состоит в том, чтобы передать элемент сущности в ячейку

  • В NotesheetTableViewCell (пожалуйста, назовите его начальной заглавной буквой) добавьтесвойство

    var entity : Entity!
    
  • В cellForRowAt передать элемент модели в ячейку

    let item = frc.object(at: indexPath) as! Entity
    cell.entity = item
    
  • В NotesheetTableViewCell добавить textDidEndEditing метод делегата, когда он называется update entity.

  • В didEndEditingRowAt сохранить контекст.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...