2016-09-11 2 views
0

저는 Firebase에 처음 접했습니다. 내 작은 프로젝트 중 하나에서 사용하고 있습니다. 나는 사용자가 등록 할 때 db에 사용자 노드를 만들고 그 아래에 정보를 추가합니다. uid는 객체의 ID입니다. 다음과 유사합니다. 내가 추가 할 해당 노드에서 트랜잭션 블록을 실행하려고하면파이어베이스가 첫 번째 값으로 null을 반환합니다.

users 
    $uid 
     email = "[email protected]" 

은 인/아웃 결과 다음과 같은 몇 가지 물건의 엑스 코드 인쇄를 업데이트합니다. 이 사전에 캐스팅 될 수 없으므로 코드가 실패합니다. firebase에서 내 데이터를 내보내려고하면 null 값이 없습니다. 숫자 ID가 사용 된 경우 이와 비슷한 질문을 보았는데 여기서는 그렇지 않습니다. 나는 무엇이 잘못되었는지 알 수 없다. 그냥이 노드에 데이터를 추가하려면 어떤 도움을

Optional(<null>) 
Optional({ 
    email = "[email protected]"; 
}) 
+0

runTransactionBlock 메서드를 사용하고있었습니다. 이 메서드는 여러 번 호출됩니다. 내가 제대로 처리하면 데이터를 저장할 수있었습니다. – user35012

+0

동의 함 (내 대답의 왼쪽 상단 부분에 체크 표시) 내 답변으로 문제가 해결되면 여러 옵션을 제안했습니다. :) 해피 코딩 http://stackoverflow.com/help/someone-answers – Dravidian

+0

@ user35012 이것에 대한 해결책을 찾았습니까? 나는 똑같은 문제에 직면 해있다. –

답변

0

... 감사합니다 : -

let dbRef = FIRDatabase.database().reference().child("users").child(FIRAuth.auth()!.currentUser!.uid) 
  • 당신은 당신의 snapshot.value으로 NSMutableDictionary를 검색하여 그것을 할 수 있습니다.

    dbRef.child("email").observeSingleEventOfType(.Value, withBlock: {(list) in 
    
          if let listDict = list.value as? NSMutableDictionary{ 
    
           listDict.setObject(newValue, forKey: newKey) 
           dbRef.setValue(listDict) 
    
          } 
    

당신은 당신이 할 수있는 데이터를 업데이트하려면 다음 중 하나 -

  • 실행합니다 transactionBlock : -

    dbRef.child("email").runTransactionBlock({ (data: FIRMutableData) -> FIRTransactionResult in 
         // Set value and report transaction success 
        data.value = "[email protected]" 
        return FIRTransactionResult.successWithValue(data) 
          }) { (error, committed, snapshot) in 
          if let error = error { 
           print(error.localizedDescription) 
           } 
         } 
    
  • 갱신 값 : -

     dbRef.updateChildValues(["email" : "[email protected]"]) 
    
관련 문제