2017-01-14 7 views
1

에서 자동 ID 값을 검색 나는 중포 기지에 아래의 구조를 생성하고 난 자동 ID가 빨간색 밑줄 얻을 필요가 :스위프트 3 중포 기지 : 스냅 샷

enter image description here

내가 값을 쿼리 생성 된 코드

Optional({ 
    "-KaRVjQgfFD00GXurK9m" =  { 
     receiverId = LKupL7KYiedpr6uEizdCapezJ6i2; 
     senderId = bS6JPkEDXIVrlYtSeQQgOjCNTii1; 
     timestamp = 1484389589738; 
    }; 
}) 
:에

let query = reference.queryOrdered(byChild: "receiverId").queryEqual(toValue: "LKupL7KYiedpr6uEizdCapezJ6i2") 
     //Start process 
     query.observe(.value, with: { (snapshot) in 
      guard snapshot.exists() else{ 
       print("Data doesn't exists") 
       return 
      } 
      print(snapshot.key) 
} 

내 "snapshot.value"결과

위의 노드에서 문자열 -KaRVjQgfFD00GXurK9m을 얻는 방법은 무엇입니까?

나는 "인쇄 (snapshot.key)"를 사용하여 시도했다 그러나 사용자 ID에 결과 :

몇 가지 아이디어가 bS6JPkEDXIVrlYtSeQQgOjCNTii1? 고맙습니다.

+0

질문을 게시 할 때 이미지를 사용하지 마십시오. 검색 가능한 텍스트를 사용하십시오. 다시 입력 할 필요없이 복사하여 붙여 넣을 수 있습니다. 또한 senderId 자식 노드는 부모 - 부모 노드 키의 복제본입니다 (내 대답 참조). 아무 문제가 없지만 부모 스냅 숏에서 동일한 데이터를 검색 할 수 있습니다. 스냅 샷) – Jay

답변

7

.value는 부모 노드와 쿼리 결과를 만족하는 모든 자식 노드를 반환합니다. 이 경우 자식을 반복해야합니다 (쿼리와 일치하는 자식이 둘 이상있을 수 있음).

snapshot.key는 부모 노드 키 (bS6JPkk)입니다. 값은 모든 자식의 스냅 숏 (사전)입니다. 각 자식은 다음과 같은 키입니다. value 쌍의 uid : value 및 value 자식 노드 dictionary, receiverId, senderId 등

이 코드는 각 자식 노드의 uid와 timestamp 값 중 하나를 인쇄합니다. 쿼리와 일치하는 각 사용자 노드

let usersRef = ref.child("users") 
    let queryRef = usersRef.queryOrdered(byChild: "receiverId") 
          .queryEqual(toValue: "LKupL7KYiedpr6uEizdCapezJ6i2") 

    queryRef.observeSingleEvent(of: .value, with: { (snapshot) in 

     for snap in snapshot.children { 
      let userSnap = snap as! FIRDataSnapshot 
      let uid = userSnap.key //the uid of each user 
      let userDict = userSnap.value as! [String:AnyObject] 
      let timestamp = userDict["timestamp"] as! String 
      print("key = \(uid) and timestamp = \(timestamp)") 
     } 
    }) 
+0

Jay, 일했습니다! 대단히 죄송합니다. 이미지를 부탁드립니다. 다음 번에 피할 수 있습니다! 그 대답을 완료하기 위해, 나는 방금 "** timestamp = userDict ["timestamp "]!"** "timestamp = (userDict ["timestamp "] ?. stringValue) * "오류를 방지하려면 다음과 같이하십시오." 'NSDecimalNumber'유형의 값을 'NSString'으로 변환 할 수 없습니다. " – Enzo