2016-09-11 3 views
0

Я как бы новый для Firebase. Я использую его в одном из моих небольших проектов. Я создаю узел users на db, когда пользователь регистрируется и добавляет свою информацию под ним, где uid является идентификатором объекта. Это похоже на следующее.Firebase возвращается в качестве первого значения

users 
    $uid 
     email = "[email protected]" 

Когда я пытаюсь запустить блок транзакций на этом узле, чтобы добавить/обновить некоторые вещи Xcode распечатывает следующий результат. Так как это не может быть переведено в код словаря, происходит сбой. Когда я пытаюсь экспортировать свои данные из firebase, нет нулевых значений. Я видел похожие вопросы к этому, когда используются числовые идентификаторы, что здесь не так. Я просто не могу понять, что не так. Любая помощь приветствуется ...

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

Я использовал метод runTransactionBlock. Оказывается, этот метод называется несколько раз. Когда я правильно обработал, мне удалось сохранить свои данные. – user35012

+0

Принять (отметьте галочкой верхнюю левую часть моего ответа) мой ответ, если он решил вашу проблему, я предложил несколько вариантов. :) Happy Coding 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]"]) 
    
Смежные вопросы