Работа с поиском в UITableView с Firebase - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть UITableView, где все детали из узла root->Data успешно извлекаются. Я пытаюсь реализовать SearchController для фильтрации данных, но, похоже, он не извлекает результаты поиска и не связывает их с UITableView.

Моя структура Firebase JSON выглядит следующим образом:

"Data" : {
    "01" : {
      "priority" : 2,
      "search" : "school centre",
      "title" : "School Centre"
    },

Вот код из updateSearchResults:

func updateSearchResults(for searchController: UISearchController) {
        filterContent(searchText: self.searchController.searchBar.text!.lowercased())
    }

    func filterContent(searchText:String)
    {
        if (searchText.count == 0){
            observePosts()
        } else {
            print(searchText)
            observeSearchPosts(searchText: searchText)
        }
    }

Единственная разница между observePosts и observeSearchPosts заключается в справочной строке базы данных:

func observeSearchPosts(searchText: String) {
    let postsRef = Database.database().reference().child("Data").queryOrdered(byChild: "search").queryStarting(atValue: searchText)
    print(postsRef)
    postsRef.observe(.value, with: { snapshot in
        var tempPosts = [Post]()

        for child in snapshot.children{

            if let childSnapshot = child as? DataSnapshot,
                let dict = childSnapshot.value as? [String:Any],
                let title = dict["title"] as? String,
                let logoImage = dict["image"] as? String,
                let url = URL(string:logoImage),
                let address = dict["address"] as? String,
                let contact = dict["contact"] as? String,
                let description = dict["description"] as? String{


                let userProfile = UserProfile(title: title, photoURL: url)
                let post = Post(id: childSnapshot.key, title: userProfile, description: description, image: userProfile, address: address, contact: contact)
                print(post)
                tempPosts.append(post)
            }
        }
        self.posts = tempPosts
        self.tableView.reloadData()
    })
}

В observePosts ссылка на базу данных let postsRef = Database.database().reference().child("Data").queryOrdered(byChild: "priority").

1 Ответ

0 голосов
/ 10 апреля 2019

получить все данные из firebase, а затем использовать поиск в локальной записи массива ....!и затем перезагрузите таблицу

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