2016-07-28 2 views
1

Firebase 사용자 이름을 UserDefault에 저장하려고합니다.nil을 확인한 후 예기치 않게 nil이 발견되었습니다.

let databaseRef = FIRDatabase.database().reference() 
databaseRef.child("Users").child((FIRAuth.auth()?.currentUser?.uid)!).observe(.value, with: { (snapshot) in 
    print("log in 4") 
    print(snapshot.value) 
    if snapshot.value != nil { 
     print("log in 4.1") 
     UserDefaults.standard.set(snapshot.value!["username"], forKey: "username")//Crash probably occurs here 
     print("log in 4.2") 
    } 

}) 

시스템 인쇄 log in 4log in 4.1 있지만 4.2 : 여기에 내가 가진 것입니다. 사이의 라인에서 오류가 발생해야합니다. snapshot.value이 0이 아닌지 확인하지만 여전히 nil을 출력합니다. 이 문제를 어떻게 해결할 수 있습니까? 감사! 당신은 당신이 푸는 원하는 값을 얻을 바인딩을 선택적으로 사용한다

+5

'snapshot.value [ "이름"]'에 대한 값이없는 경우 전무를 반환합니다 'username' 키를 누른다. 로그 문을 사용하는 대신 디버거와 단일 스테핑을 사용하는 방법을 배워야합니다. – Paulw11

+0

@ Paulw11 왜이 질문에 답변을 게시하지 않으셨습니까? – Losiowaty

+1

대답이 아닐 수도 있습니다. (아마도 그렇습니다.) 그러나 질문자에게 대답을 게시하기 전에 의견을 확인하는 것을 선호합니다. – Paulw11

답변

0

당신은 너무 nil 없습니다. 그렇다고해서 snapshot.value"username" 값이 들어있는 것은 아닙니다.

비어있는 초기화 된 경우 nil도 아닙니다. 그래서

는 키 자체에 대한 검사를 추가해야 할 것이 특정 키를 확인합니다 :

if let userValue = snapshot.value?["username"] 
0

... 현재 단지 snapshot.value어떤 값이 포함되어 있는지 확인하는

if let username = snapshot.value?["username"] { 
    // now you can use username safely 
} 
관련 문제