Объект результатов Realm с неверными результатами (iOS, Swift) - PullRequest
0 голосов
/ 10 октября 2019

У меня проблемы с получением правильного доступа к объекту результата Realm с помощью cellForRowAt UITableView.

Вот настройка:

UITableViewController разделен на разделы на основе категории объектов (строка, определенная вобъект).

UITableViewController имеет переход к UIViewController, который принимает ввод формы. Этот контроллер представления пишет в Realm, а затем выполняет обратный вызов через делегирование, чтобы обновить данные табличного представления.

Когда этот экран закрывается и возвращается к UITableViewController, когда я пытаюсь добавить строку через категорию, я получаюпустые предметы. Однако, когда я использую цикл for в cellForRowAt, я могу получить доступ к данным.

Вот что я запускаю в этом разделе:

func loadItems() {
        itemsList = try! Realm().objects(Items.self).filter("list_id = \(list_id)").sorted(byKeyPath: "item_category")
        tableView.reloadData()

    }    

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


        let cell = tableView.dequeueReusableCell(withIdentifier: "itemListCell", for: indexPath)
        let categoryName = categories.categories[indexPath.section]

        let currItem = itemsList[indexPath.row]

        if currItem.item_category == categoryName {
            cell.textLabel!.text = currItem.item_name
        }

        return cell
    }

Кажется, что оценка категории выполняется правильнои заходя в этот блок, но item_name и item_category объекта имеют значение null. Вот снимок экрана отладчика внутри оператора if:

Изображение отладчика

Есть ли что-то, что мне нужно изменить в зависимости от того, как я использую объект, извлекая данныеи т. д., чтобы получить правильные данные в объекте?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Нашел мой ответ здесь: UITableView с несколькими разделами с использованием Realm и Swift

Это изменение, которое я внес в cellForRowAt:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "itemListCell", for: indexPath)

        let currItem = itemsList.filter("item_category = '\(categories[indexPath.section])'")[indexPath.row]
        cell.textLabel!.text = currItem.item_name

        return cell
    }

Проблема, с которой я столкнулсяИмея в виду, я постоянно вытягивал объект результатов первой позиции, а не первую позицию в разделе. Мне нужно было сузить свой раздел, а затем потянуть первый ряд.

0 голосов
/ 10 октября 2019

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

itemsList = try! Realm().objects(Items.self).filter("list_id = \(list_id)").sorted(byKeyPath: "item_category"

на это

itemsList = try! Realm().objects(Items.self).filter("list_id = '\(list_id)'").sorted(byKeyPath: "item_category"

Добавить одинарные кавычки вокруг '(list_id)'.

Фильтрация областей

...