UITableView с основными данными, выдвигающими неверный индекс и данные - PullRequest
0 голосов
/ 08 декабря 2018

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

Проблема: После фильтрации записей в UITableView (записи берутся из основных данных) и попытки передать данные в другой viewcontroller, я получаю нефильтрованный индекс для данных, поэтому неверные данные передаются в новый контроллер представления.

Мой код ниже:

Я установил глобальную переменную для основных данных:

var events : [Event] = []

 @objc func textFieldDidChange(_ textField: UITextField) {

    if searchField.text == "" {
        filterAdded = false
    } else {
             filterAdded = true
             let request:NSFetchRequest<Event> = Event.fetchRequest()

            let predicate = NSPredicate(format: "name CONTAINS[c] %@ AND nearestDate >= %@", searchField.text!, currentCorrectDate! as CVarArg)

            request.predicate = predicate
            let sortDescriptor = NSSortDescriptor(key: "nearestDate", ascending: true)
            request.sortDescriptors = [sortDescriptor]

            do {
                events = try DatabaseController.getContext().fetch(request)
            }
            catch {
                print("Error: \(error)")
            }

            mainListOfDates.reloadData()
        }
    }

}

Он срабатывает каждый раз, когда какой-либо символ добавляется в поле поиска,Имя UITableView - "mainListOfDates".

Эта функция работает правильно и рассчитывает только отфильтрованные события:

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

Эта функция показывает все записи из основных данных в ячейках UITableView:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "eventCell", for: indexPath) as! EventTableViewCell
    let event = events[indexPath.row]

cell.eventNameLabel.text = event.value(forKeyPath: "name") as? String
return cell

}

И с "didSelectRowAt" я хотел бы отправить отфильтрованные или нефильтрованные (отлично работает с нефильтрованными) данные в новый контроллер представления:

 let Storyboard = UIStoryboard(name: "Main", bundle: nil)
    let eventStoryboard = Storyboard.instantiateViewController(withIdentifier: "EventViewController") as! EventViewController
let cell = tableView.dequeueReusableCell(withIdentifier: "eventCell", for: indexPath) as! EventTableViewCell

eventStoryboard.getEventName = events[indexPath.row].name ?? "nil"

self.navigationController?.pushViewController(eventStoryboard, animated: false)     }

Как решить эту проблему иотправить отфильтрованные правильные данные в новый контроллер представления?

Заранее спасибо.

...