이 파일은 Firebase에서 코드를 검색하고 그 파일로 처리하려고하는 두 번째 버전입니다. 이것은 내가 그에게 두 번째 방법을 수행하는 방법입니다 Firebase에서 데이터를 올바르게 가져올 수 없습니다.
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!
}
이
오류 코드와 함께 추락 :유형 'NSDictionary에'(0x10a780288)에 '__NSCFString'(0x10a77f4a0)의 값을 캐스팅 할 수 없습니다. "update"라인에서. 이것은 내 첫 번째 시도 :
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
}
이것은 부풀어 오르지 않습니다.
스냅 (창조자) 안녕하세요
인쇄 ("변경된 창조자"가) 실행되지 않을 그러나 : 중포 기지에서 작성자 (단지 문자열)을 변경하는 경우 (스냅 샷) 인쇄를 추가 할 때, 나는 인쇄로이를 얻을 수 . 왜 이런거야?
편집 :
print("path channel ref: " + "\(self.channelRef)")
print("snapshot: " + "\(snapshot)")
print("value: " + "\(value)")
- 경로 채널 심판 : 이것은 내가 channelRef?
super.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
}
인쇄 더 많은 데이터를 가지고 어떻게 선택 (https://X.com/channels/-KeGKaJavH6uPYaSa7k4)
-snapshot : 스냅 (창작자) new 창조자
- 값 : 없음
,451,515,업데이트 :
데이터 구조 :
이 지금은 작동하지만 더 나은 방법이없는? :
if snapshot.key == "creator"
{
changedCreator = snapshot.value as! String
}
또 다른 문제는, 위의하지만 첫 번째 문제에 대한 솔루션과 정확히 같은이 문제가 해결되지 않습니다. 첫 번째 자식 노드를 얻으려고하면 첫 번째 사용자가 자신의 userID를 얻으려고 시도 할 때 아무 것도 작동하지 않습니다. 나는이 코드를 사용한다 :
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;
};
})
그리고 이것은 사용자 ID가 주어지지 않으므로 출력된다. 왜 이런거야? 사용자 ID가 바로 있습니다! 당신은`channelRef?`변수를 설정 어디 라인을 포함 할 수 있습니다
와
chatVc.channelRef = channelRef.child(channel.id)
를 교체 시도 ... 나는 문서를 읽을 수 있지만 그것은 작동 하는가? –''some_collection/an_object ''대신''some_collection/an_object/readyToGo ''처럼 데이터베이스 구조에 너무 깊게 들어가는 경로를''snapshot'이 왜 사전 대신 –
문자열을 편집했습니다. 내가 생각하는 사전에 데이터를 바꿀 때 뭔가 잘못되었습니다. – Petravd1994