2017-12-13 3 views
0
` let query = ref?.child("Reviews").queryOrdered(byChild: "UserID").queryEqual(toValue: myUser.userId) 
     query?.observeSingleEvent(of: .value) { snapshot in 
      for child in snapshot.children { 
       let snap = child as! DataSnapshot 
       let dict = snap.value as! [String: Any] 
       let uid = dict["UserID"] as! String 
       let review = dict["Body"] as! String 
       let rating = dict["Rating"] as! String 
       let titleID = dict["TitleID"] as! String 
       let reviewID = dict["ReviewID"] as! String 

       let ratingID = dict["RatingID"] as! String 
       ` 

데이터베이스에 대한 ratingID 호출시 오류가 발생합니다. 그것은 nil을 언랩합니다.Firebase xcode를 손상시키지 않고 기존 데이터베이스에 새로운 키/값을 추가하십시오.

기존의 Firebase 데이터베이스를 새로운 키/값으로 변경하려고합니다. 그런 다음 내 tableview에 항목을 표시하려고 시도하고 nil을 반환하는 unwrap과 충돌이 발생합니다. 나는 이것이 왜 일어나는지를 알고 있으며 그것은 이전 데이터가 앞으로 노드에 포함하고자하는 새로운 키/값을 가지지 않기 때문입니다. 나는 let과 guard가 많은 운없이하자면 많은 다른 것들을 시도했다. 새 키/값을 추가하고 테이블 뷰에 새 값이없는 항목을 읽도록하려면 어떻게해야합니까?

현재 노드의 이미지가 포함되어 있으며 노드에 '등급 ID'를 추가하려고합니다. 내가 할 때, 나는 unwrap nil 에러를 얻는다. 이전에 새 키에

데이터베이스 노드/값

enter image description here

+0

을 테스트하기 위해 할당된다! – ROKOKO

+0

문제가 발생한 곳의 코드를 포함하고 오류가 발생한 행을 표시하십시오. [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (https://stackoverflow.com/help/mcve)을 참조하십시오. – Jay

+0

코드를 추가했습니다. 나는 이미 문제가 뭔지 알고, 내 문제는 새로운 형식으로 모든 항목을 다시하지 않고 등급 ID 키 값을 가지고 있지 않은 오래된 항목을 어떻게 처리 할 것인가입니다. 즉, 내가 원하는 경우 나중에 키 값 쌍을 적용하여 좋아하는 항목을 추가하고 노드에 따라 가도록하고 싶습니다. – ROKOKO

답변

0

코드는 슈퍼 근접, 단지의 경우 코드를 보호하기 위해 필요한 ratingID 키가 존재하지 않습니다됩니다.

그래서

RatingID 노드가 존재하지 않는 경우 그래서, 당신은 빈 문자열로 ratingID을 설정합니다

let ratingID = dict["RatingID"] as! String 

let ratingID = dict["RatingID"] as! String ?? "" 

에 (또는 당신이 원하는 문자열) 변경 또한 노드가 존재하는 경우 해당 키의 값에 대해서만 작동하도록 코드를 작성할 수 있습니다 (0이 아님)

if let someVal = dict["xxx"] { 
    //do something with someVal 
} else { 
    print("xxx node wasn't found") 
} 

다음은 완전한 예입니다. 메시지 노드에서 일부 메시지를 읽었으며 그 중 일부는 test_key 노드가 있고 일부는 읽지 않습니다. 그렇지 않은 경우, 기본 문자열은 내가 그물에 아무데도에 대한 참조를 찾을 수 없습니다

let postsRef = self.ref.child("messages") 
postsRef.observe(.childAdded) { snapshot in 
    let dict = snapshot.value as! [String: Any] 
    let msg = dict["msg"] as! String 
    let test = dict["test_key"] ?? "default string" 
    print(msg, test) 
} 
+0

흠 나는 그것을 시도 할 때 여전히 메신저로 unrapped 오류 래요 ?? ""method – ROKOKO

+0

해당 항목에 RatingID 값 쌍이 존재하지 않기 때문에 문제가 발생한 것일 수 있습니까? – ROKOKO

+0

!를 변경하여 수정했습니다. ~에? 이후로 – ROKOKO

관련 문제