Когда / Как отсортировать свойства Realm child <List>для UITableView в Swift - PullRequest
0 голосов
/ 10 марта 2019

Я использую 2 объекта Realm для источника данных в моем UITableView:

class SectionDate: Object {

   @objc dynamic var date = Date()
   let rowDates = List<RowDate>() 
}
class RowDate: Object {

   @objc dynamic var dateAndTime = Date()
}
tableViewData = realm.objects(SectionDate.self).sorted(byKeyPath: "date", ascending: isAscending)

func numberOfSections(in tableView: UITableView) -> Int {
    return tableViewData.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return tableViewData[section].rowDates.count
}

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

    ...
    cell.rowDate = tableViewData[indexPath.section].rowDates[indexPath.row]
    ...
}

Как мне заказать section.rowDate и когда мне это сделать?

Не похоже, что я могу сделать это как часть запроса section.sorted (byKeyPath) ... я бы сделал это при инициализации объекта SectionDate?

1 Ответ

1 голос
/ 11 марта 2019

Нет, вы не можете отсортировать элемент rowDates при создании объекта SectionDate. List - это тип Realm, который не (обязательно) хранит список в отсортированном виде.

Вам нужно будет отсортировать rowDates объекты по каждому запросу объекта. Одним из предложений может быть добавление вычисляемого свойства в класс SectionDate (вычисляется - не сохраняется), который возвращает запрос, отсортированный по мере необходимости. Затем получите доступ к этому свойству в функции cellForRowAt. E.g.:

extension SectionDates
{
  var sortedRowDates
  {
    return rowDates.sorted(byKeyPath: "date", ascending: isAscending)
  }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  ...
  cell.rowDate = tableViewData[indexPath.section].sortedRowDates[indexPath.row]
  ...
}

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

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