Ich erstelle eine App, die die Firebase-Datenbank verwendet, um zwei verschiedene untergeordnete Datenbanken in einer Zelle anzuzeigen. Also, da meine erste Kinddatenbank "Name" heißt, wäre es der Haupttext der Zelle, und die zweite Kinddatenbank, "ImageURL", wäre der Untertitel der Zelle.Firebase-Datenbank zu UITableView-Zellenproblemen
Ich bin nicht in der Lage herauszufinden, warum immer wenn ich versuche, die zweite Kind-Datenbank in die Tabellenansicht Zelle zu bekommen, funktioniert es nicht. Ich bekomme entweder einen Index außerhalb des Bereichsfehler, oder die zweite Kinddatenbank wird überhaupt nicht angezeigt.
Hier ist mein Code:
Variablen:
@IBOutlet weak var myTextField: UITextField!
@IBOutlet weak var myNameField: UITextField!
@IBOutlet weak var myTableView: UITableView!
var ref: DatabaseReference!
var myNameList:[String] = []
var myList:[String] = []
var handle:DatabaseHandle!
var nameHandle: DatabaseHandle!
Knopf-Code, wenn SAVE-Taste gedrückt wird:
@IBAction func saveBtn(_ sender: Any) {
if myNameField.text != "" {
ref?.child("Name").childByAutoId().setValue(myNameField.text)
myNameField.text = ""
if myTextField.text != "" {
ref?.child("ImageURL").childByAutoId().setValue(myTextField.text)
myTextField.text = ""
}
}
}
Tableview Funktion numberOfRowsInSection Code:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myList.count
}
Tableview Funktion CellForRowAtIndexPath Code:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
cell.textLabel?.text = myNameList[indexPath.row]
cell.detailTextLabel?.text = myList[indexPath.row]
ViewDidLoad Code:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ref = Database.database().reference()
handle = ref?.child("ImageURL").observe(.childAdded, with:{ (DataSnapshot) in
if let item = DataSnapshot.value as? String{
self.myList.append(item)
self.myTableView.reloadData()
}
})
nameHandle = ref?.child("Name").observe(.childAdded, with:{ (DataSnapshot) in
if let nameItem = DataSnapshot.value as? String{
self.myList.append(nameItem)
self.myTableView.reloadData()
}
})
}
Mein Main.Storyboard:
Danke für die Hilfe. Das hat funktioniert! – Pannu
Haben Sie Ideen, wie Sie Bilder in eine Firebase-Datenbank statt nur eine Bild-URL implementieren können? – Pannu
Firebase Storage kann Speicher für Ihre Bilder bereitstellen. Sie konvertieren sie in 'Data' und laden sie mit Firebase Storage hoch, dann spuckt sie eine URL zurück, mit der Sie das Image herunterladen können, wenn Sie es wollen. https://firebase.google.com/docs/storage/ios/start – Connor