Dies ist meine zweite Version, die versucht, Code von Firebase abzurufen und Sachen damit zu tun. Dies ist, wie ich es die zweite Art und Weise getan:Kann Daten nicht korrekt von Firebase abrufen
channelRef?.observe(.childChanged, with: { (snapshot) -> Void in
let update = snapshot.value as! Dictionary<String, AnyObject>
var readyToGoValue: Bool?
var userID: String?
var amountOfPlayers: Int?
var changedCreator: String?
if let updatedReadyToGo = update["readyToGo"] as! Bool!{
if updatedReadyToGo == true
{
readyToGoValue = true
}
else
{
readyToGoValue = false
}
}
if let updateduserID = update["userID"] as! String!{
userID = updateduserID
}
if let updatedAmountOfPlayers = update["currentPlayers"] as! Int!{
amountOfPlayers = updatedAmountOfPlayers
}
if let updateduserID = update["userID"] as! String!{
userID = updateduserID
}
if let updatedCreator = update["creator"] as! String!{
changedCreator = updatedCreator
}
let currentUser = FIRAuth.auth()?.currentUser?.uid
if changedCreator != nil
{
print("changed creator")
self.creator = changedCreator!
}
Dieses mit einem Fehlercode abgestürzt:
nicht Wert vom Typ werfen kann ‚__NSCFString‘ (0x10a77f4a0) auf ‚NSDictionary‘ (0x10a780288). an der Zeile "update". Dies war mein erster Versuch:
channelRef?.observe(.childChanged, with: { (snapshot) -> Void in
let value = snapshot.value as? NSDictionary
let readyToGoValue = value?["readyToGo"] as? Bool ?? false
let userID = value?["userID"] as? String ?? ""
var amountOfPlayers = value?["currentPlayers"] as? Int ?? 0
let changedCreator = value?["creator"] as? String ?? ""
print(snapshot)
let currentUser = FIRAuth.auth()?.currentUser?.uid
print(changedCreator)
print(amountOfPlayers)
if changedCreator != ""
{
print("changed creator")
self.creator = changedCreator
}
Dies funktioniert nicht anschwellen. Wenn der Schöpfer zu wechseln (nur eine Zeichenfolge) in Firebase, bekomme ich dies als Druck, wenn Druck Hinzufügen (Snapshot):
Schnapp (Konzept) hallo
jedoch die print („geänderte Schöpfer“) nie ausgeführt wird . Warum ist das?
edit: Dies ist, wie ich channelRef ?:
bekamsuper.prepare(for: segue, sender: sender)
if let channel = sender as? Channel {
let chatVc = segue.destination as! channelMultiplayerViewController
chatVc.channel = channel
chatVc.channelRef = channelRef.child(channel.id)
chatVc.usersKey = userKey
}
Druck mehr Daten:
print("path channel ref: " + "\(self.channelRef)")
print("snapshot: " + "\(snapshot)")
print("value: " + "\(value)")
-path Kanal ref: Optional (https://X.com/channels/-KeGKaJavH6uPYaSa7k4)
-snapshot: Schnapp (Schöpfer) neuer Schöpfer
-Wert: Null
Update:
Datenstruktur:
Dies wird jetzt funktionieren, ist aber nicht, dass es eine bessere Lösung?:
if snapshot.key == "creator"
{
changedCreator = snapshot.value as! String
}
Ein weiteres Problem, genau die gleichen wie oben, aber mit der Lösung für das erste Problem, wird dieses Problem nicht gelöst wird erhalten. Wenn ich versuche, den ersten Kind-Knoten zu bekommen, also den ersten Benutzer, und versuche, seine Benutzer-ID zu bekommen, funktioniert nichts. Ich benutze diesen Code:
let firstChild = UInt(1)
self.channelRef?.queryLimited(toFirst: firstChild).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
print(snapshot)
print(value)
let newCreator = value?.value(forKey: "userID") as? String
if newCreator != nil{
print("Got the userID")
}
if snapshot.key == "userID"
{
print("Got the userID")
}
})
Snap (-KeJWMiXaL-FGp0J7b3u) {
"-KeJWO0V9kxgGnrACAtP" = {
PictureVersion = 2;
readyToGo = 0;
userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
username = pietje;
};
}
Optional({
"-KeJWO0V9kxgGnrACAtP" = {
PictureVersion = 2;
readyToGo = 0;
userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
username = pietje;
};
})
Und das druckt aus, so dass keine userID gegeben ist. Warum ist das? Die Benutzer-ID ist genau dort! Ich lese die Dokumentation aber es sollte funktionieren ...
ersetzen können Sie die Zeile enthalten, in dem Sie die 'channelRef?' Variable gesetzt? –
Es ist möglich, dass Sie ihm einen Pfad gegeben haben, der eine Ebene zu tief in Ihre Datenbankstruktur geht, wie '" some_collection/an_object/readyToGo "' anstelle von '" some_collection/an_object "', was erklären würde, warum 'snapshot' als zurückgegeben wird eine Zeichenfolge anstelle eines Wörterbuchs –
Ich habe die Frage bearbeitet. Irgendetwas stimmt nicht, wenn ich die Daten in das Wörterbuch ändere, denke ich – Petravd1994