Передача ссылки на документ на второй контроллер представления - PullRequest
0 голосов
/ 07 мая 2018

Может кто-нибудь показать мне, как я могу сделать так, чтобы, когда я щелкаю по определенной строке в табличном представлении, ссылка на документ передается второму ViewController, позволяющему мне показывать поля внутри подколлекции "Друзья". На данный момент я могу сделать это, но без использования autoID. Пожалуйста, может кто-нибудь, как я могу сделать это, используя autoID? Любая помощь будет принята с благодарностью, большое спасибо !!

Текущая консоль Firebase

Что бы я хотел - Firebase Console

First ViewController

    func loadData() {
    db.collection("Users").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                let data = document.data()
                let name = data["name"] as? String ?? ""
                let newName = UsersNames(name: name)
                self.nameArray.append(newName)
            }
            self.tableView.reloadData()
        }
    }
}

Второй ViewController

    func loadData() {
    db.collection("Users").document("Hello").collection("Friends").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                let data = document.data()
                let name = data["name"] as? String ?? ""
                let details = data["details"] as? String ?? ""
                let newFriends = Friends(friendName: name, friendDetails: details)
                self.friendsArray.append(newFriends)
            }
            self.tableView.reloadData()
        }
    }
}

1 Ответ

0 голосов
/ 07 мая 2018

Если вы хотите сделать это таким образом, сначала вам нужно добавить свойство documentID к вашему UsersNames объекту:

    struct UsersNames {

        var documentID: String //<-- Add this
        var name: String
    }

Затем обновите функцию loadData() в вашем первом VC, чтобы получитьdocumentID из каждого Firestore документа и добавьте его в Array:

        for document in querySnapshot!.documents {
            let data = document.data()
            let documentID = document.documentID //<-- Add this
            let name = data["name"] as? String ?? ""
            let newName = UsersNames(documentID: documentID, name: name) //<-- Change this
            self.nameArray.append(newName)
        }

В First VC вы хотите выполнить Segue для вашего Second VC, когда ячейка выбрана, ипередайте documentID для выбранного объекта в Array во второй виртуальный канал.

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "SecondVC", sender: self)
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let indexPath = tableView.indexPathForSelectedRow {
            let destinationVC = segue.destination as! SecondVC
            let documentId = nameArray[indexPath.row].documentID
            destinationVC.documentID = documentID
        }
    }

В вашем SecondVC создайте свойство для получения documentID:

    var documentID: String!

В вашемФункция SecondVC loadData(), теперь вы можете получить доступ к документу ID, который был передан с вашего первого VC:

    db.collection("Users").document(documentID).collection("Friends").getDocuments() { //..
...