Я боролся с этим уже несколько дней.На этом сайте есть похожие проблемы, но не очень.И мне не удалось идти вперед.Я постараюсь упростить это с одной переменной.
Проблема: После фильтрации записей в 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) }
Как решить эту проблему иотправить отфильтрованные правильные данные в новый контроллер представления?
Заранее спасибо.