Ich entwickle eine App, wenn ich versuche, Benutzer zu finden, indem ich sie während der Suche in einer Suchleiste von der Firebase Datenbank abruft. Ich lege meinen Benutzernamen in ein Array und zeige ihn in tableView an, wenn der angetippte Text den Nicknamen von Benutzern mit Autovervollständigung entspricht. Ich kann es machen. Aber jetzt versuche ich die Benutzerprofilseite anzuzeigen, wenn ich nach einem Benutzer suche, wähle ich Name in der Tabellenansicht aus, tippe dann seinen Spitznamen auf die TableView, dann öffnet es einen anderen ViewController und sollte die Informationen des ausgewählten Benutzers aber anzeigen Es zeigt nur die Standardseite ohne benutzerdefinierte Informationen über den ausgewählten Benutzer.Weitergabe von Daten von Firebase iOS von einem TableViewController an einen anderen ViewController
zeige ich Ihnen, meine aktuellen Code:
class UserTableViewController: UITableViewController, UISearchResultsUpdating {
var userTab = [String]()
var userEmpty = ["No user"]
var filteredUsers = [String]()
var searchController: UISearchController!
var resultsController = UITableViewController()
var name: String!
var ref: DatabaseReference!
var dictDetails: [String:AnyObject]?
override func viewDidLoad() {
super.viewDidLoad()
self.resultsController.tableView.dataSource = self
self.resultsController.tableView.delegate = self
ref = Database.database().reference()
ref.child("users").queryOrdered(byChild: "pseudo").observeSingleEvent(of: .value, with: { (snapshot) in
self.userTab = []
if (snapshot.value is NSNull) {
print("No data found")
} else {
for child in snapshot.children {
let userSnap = child as! DataSnapshot
let uid = userSnap.key
let userDict = userSnap.value as! [String: AnyObject]
let pseudo = userDict["pseudo"] as! String
let total = snapshot.childrenCount
self.userTab.append(pseudo)
self.resultsController.tableView.reloadData()
continue
}
}
})
self.searchController = UISearchController(searchResultsController: self.resultsController)
self.tableView.tableHeaderView = self.searchController.searchBar
self.searchController.searchResultsUpdater = self
self.searchController.dimsBackgroundDuringPresentation = false
self.definesPresentationContext = true
}
func updateSearchResults(for searchController: UISearchController) {
self.filteredUsers = self.userTab.filter { (user:String) -> Bool in
if user.lowercased().contains(self.searchController.searchBar.text!.lowercased()) {
return true
} else {
return false
}
}
self.resultsController.tableView.reloadData()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "userProfil" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let data = userTab[indexPath.row] as! [String: AnyObject]
let pseudo = data["pseudo"] as? String
let controller = segue.destination as! UserViewController
controller.pseudo = pseudo!
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.tableView {
return self.userTab.count
} else {
return self.filteredUsers.count
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if tableView == self.tableView {
cell.textLabel?.text = self.userTab[indexPath.row]
} else {
cell.textLabel?.text = self.filteredUsers[indexPath.row]
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "userProfil", sender: nil)
}
}
Und für die anderen View-Controller:
class UserViewController: UIViewController {
@IBOutlet weak var name: UILabel!
var pseudo: String = ""
var dictionary: [String:AnyObject]?
var ref: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
ref.child("users").queryOrdered(byChild: pseudo).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
self.name.text = dictionary["pseudo"] as? String
}
})
}
}
Wie kann ich das tun?
Was sind Debugging-Ergebnisse? Wenn Sie einen Haltepunkt innerhalb des Callbacks platzieren, können Sie Daten von Firebase drucken? –
Ok, ich löse mein Problem, ich kann die Lösung hier posten –