У меня настроено Double Action в IB на таблице, и когда я дважды щелкаю строку таблицы после сортировки таблицы, tableview.selectedRow теперь отличается от индекса массива, из которого он был изначально загружен.
let trade = trades[tableView.selectedRow]
позволяет мне видеть trade.tradeNo
и другие элементы модели, но это не объект из строки, по которой я щелкнул в таблице (из-за сортировки, если я щелкнул заголовок столбца ...моя сортировка настроена в IB, а не в коде, использующем sortDescriptors).
Есть ли способ использовать tableView.selectedRow в качестве индекса, чтобы сделать что-то вроде:
let trade = arrayController.selectedObjects as! [TradeMode]
Но это не работает.... нет tr.tradeNo
За свою жизнь я не могу узнать, как получить данные строки.
Я перебрал массив arrayController.arrangedObjects, подобный этому
for trade in arrayController.arrangedObjects as [TradeModel]{
....
и я могу видеть все правильные данные .. например, trade.tradeNo
и т. Д.
Но я просто хочу использовать индекс и перейти к строке, по которой я дважды щелкнул.
Весь веб-поиск, который я делал, продолжает придумывать, как сделать привязки tableview к контроллеру массива ... это все настроено и работает хорошо.Вот фотография проблемы .... не выделенная строка в таблице ниже, отсортированная по убыванию даты.selectedRow 5 больше не является индексом 5 в массиве 'trades', отображаемом на всплывающем экране сведений
TableView с всплывающим экраном сведений
[2018-10-06]Я нашел работоспособное решение, хотя я не уверен, что оно лучшее.После того, как двойное действие (двойной щелчок) выполнено, я делаю копию arrayController.arrangedObjects в новый массив
let tr = arrayController.arrangedObjects as![Trade]
В этом массиве (tr) все сделки теперь находятся в отсортированном порядке.Поэтому, когда я использую tr [tableView.selectedRow] .tradeNo, я получаю правильную сделку.
Опять же, я не уверен, что делаю лучшее для своего приложения.Я пытаюсь использовать Swift и KVO и arrayController, чтобы сделать всю тяжелую работу.Итак, я все еще задаюсь вопросом, как сделать это правильно.
Есть ли в IB настройки для arrayController (например, в Bindings) для selectionIndexes и sortDescriptors и т. Д., Которые будут поддерживать мой исходный массив (сделки) в синхронизациис изменениями в массиве Controller?Возможно, я действительно не хочу, чтобы это произошло.Я просто еще не знаю.