Быстрая фильтрация базы данных по дочерним узлам - PullRequest
1 голос
/ 04 июля 2019

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

Вот мой код:

Как я пытаюсь отфильтровать данные:

self.items.append(item)

  self.items.sort(by: { (item1, item2) -> Bool in
  return item1.category.compare(item2.category) == .orderedSame
  })

 self.tableView.reloadData()

Модель:

struct Item {

var id: String?

var user: User
var fromId: String?
let item: String
let category: String
let creationDate: Date

init(user: User, dictionary: [String: Any]) {
    self.user = user
    self.item = dictionary["item"] as? String ?? ""
    self.fromId = dictionary["fromId"] as? String ?? ""
    self.category = dictionary["category"] as? String ?? ""

    let secondsFrom1970 = dictionary["creationDate"] as? Double ?? 0
    self.creationDate = Date(timeIntervalSince1970: secondsFrom1970)
}
}

Функция выборки:

    fileprivate func fetchListItems() {
    self.tableView.refreshControl?.endRefreshing()

    guard let uid = Auth.auth().currentUser?.uid else { return }
    guard let listId = list?.id else { return }

    let ref = Database.database().reference().child("lists").child(listId).child("list-items")
    ref.observe(.childAdded) { (snapshot) in

        let itemId = snapshot.key

        let itemRef = Database.database().reference().child("items").child(itemId)
        itemRef.observeSingleEvent(of: .value, with: { (snapshot) in

            let itemId = snapshot.key

            guard let dictionary = snapshot.value as? [String: Any] else { return }

            guard let uid = dictionary["fromId"] as? String else { return }

            Database.fetchUserWithUID(uid: uid, completion: { (user) in

                var item = Item(user: user, dictionary: dictionary)

                item.id = snapshot.key

                self.items.append(item)

                    self.items.sort(by: { (item1, item2) -> Bool in
                        return item1.category.compare(item2.category) == .orderedSame
                    })

                self.tableView.reloadData()
                ref.keepSynced(true)
            })
        })
    }

}

База данных:

Database picture

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