Задать заголовки разделов таблицы из запроса области - PullRequest
0 голосов
/ 17 января 2020

Я искал ответ на этот вопрос (я уверен, что он где-то есть), но не могу его найти.

Я пытаюсь заполнить заголовки разделов UITableView из базы данных Realm, где заголовок раздела находится в связанном классе.

Классы My Realm:

class Person: Object {
    @objc dynamic var personId = UUID().uuidString
    @objc dynamic var firstName: String = ""
    @objc dynamic var surname: String = ""
    @objc dynamic var mobileNumber: Int = 0
    @objc dynamic var password: String = ""

    override static func primaryKey() -> String? {
        return "personId"
    }
}

class Group: Object {
    @objc dynamic var groupId = UUID().uuidString
    @objc dynamic var person: Person?
    @objc dynamic var groupName: String = ""
    let groupContent = List<String>()

    override static func primaryKey() -> String? {
        return "groupId"
    }
}

Я хочу получить результаты groupName для текущего пользователя и использовать их в качестве заголовков разделов таблицы. Число groupNames является динамическим c для каждого пользователя.

Мой текущий код, который вообще не работает:

func getGroupNames() {
    let mobileNumber = UserDefaults.standard.integer(forKey: "mobileNumber")
    let personResult = realm.objects(Person.self).filter("mobileNumber == %@", mobileNumber)
    let groupNames = realm.objects(Group.self).filter("person == %@", personResult.self.first)
    return (groupNames)
}

Я не могу заставить groupNames быть полезными как заголовки разделов.

Помощь будет оценена!

Спасибо.

ОБНОВЛЕНИЕ

У меня теперь есть:

func getGroupNames() -> [String] {
    let mobileNumberInt = mobileNumber
    let groupNames = realm.objects(Group.self).filter("person.mobileNumber == %@", mobileNumberInt).map({$0.groupName})
    return Array(groupNames)
}

Это возвращает [«Имя группы 1», «Имя группы 2»] дважды (независимо от того, сколько объектов содержится в результатах). Почему дважды, и теперь, как мне получить их в заголовки моего раздела? Я пробовал:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> [String] {
    return getGroupNames()
}

Количество разделов работает, но заголовки не отображаются.

1 Ответ

0 голосов
/ 17 января 2020

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

func getGroupNames() -> [Group]?  {
    let realm = try Realm()
    let mobileNumber = UserDefaults.standard.integer(forKey: "mobileNumber")
    let groupNames = realm.objects(Group.self).filter("person.mobileNumber == %@", mobileNumber)
    return Array(groupNames)
}
...