2016-10-04 2 views
0

Я создал простой проект Firebase, где я могу обновить некоторые значения в дереве Firebase, в частности, reputation. Но проблема в том, что он сразу обновляется в Firebase, но не включен в ярлык в приложении. В чем причина этого?Обновленная ценность в Firebase не обновляется сразу на метке

Это код, как я обновить значение:

self.databaseRef.child("users").child((loggedInUser?.uid)!).child("reputation").runTransactionBlock({ 
      (currentData:FIRMutableData!) in 
      var value = currentData.value as? Int 
      //check to see if the node exists, if not give value of 0. 
      if (value == nil) { 
       value = 0 
      } 
      currentData.value = value! + 1 
      return FIRTransactionResult.success(withValue: currentData) 

     }) 

И я получаю значение, как это:

let snapshot = snapshot.value as! [String: AnyObject] 

      if let reputation = snapshot["reputation"] { 
       self.reputationLabel.text = "\(reputation)" 
      } else { 
       print("reputation is nil") 
      } 

ответ

1

Попробуйте это: -

FIRDatabase.database().reference().child("users/\(loggedInUser!.uid)/reputation").runTransactionBlock({ (currentData) -> FIRTransactionResult in 
     if let data = currentData.value as? Int{ 

      currentData.value = data + 1 
      return FIRTransactionResult.success(withValue: currentData) 
     }else{ 

      return FIRTransactionResult.success(withValue: currentData) 

     } 

     }, andCompletionBlock: {(err,completion,updatedData) in 

      if completion{ 

       print(updatedData!.value) 
       self.reputationLabel.text = "\((updatedData!.value)!)" 
      }else{ 

       print("Couldnt update") 

      } 
    }) 

} 
+0

К сожалению, это дает мне Ошибка: «runTransactionBlock: обнаружено использование, когда сохраняется постоянство. Помните, что транзакции * не будут сохраняться в перезапуске приложения s. Подробнее см. Https://www.firebase.com/docs/ios/guide/offline-capabilities.html#section-handling-transactions-offline. Дополнительно ()» Но обновляйте его сразу и поставить пустой внутри этикетки :) Значит ли это, что я должен взять на себя послесвечение от AppDelegate и не могу cahce значения? Я попытался удалить строку из делегата, но теперь он просто дает null. not nil. –

+0

Если ваша персистентность включена, вам нужно будет обновить метку в первом блоке, где вы обновите значение. Я предполагаю, что это не проблема, когда ваш пользователь подключен к сети. пользователь, вы должны это сделать – Dravidian

+0

Но даже если я удалил сохранение, я получаю null. –

Смежные вопросы