notJenny
notJenny

Reputation: 195

Firebase Database suddenly returning nil

Up until two days ago my code was working fine with no problems, out of the blue my code begins returning nil when I know for a fact that the value is there within my Firebase node. I have not touched the code in weeks nor have made anychanges to it any time recently. I have recently upgraded my Xcode to 9 but still running Swift 3.

I have the value radiusDistanceNumber declared above my viewDidLoad() as

class viewController: UIViewController {

var radiusDistanceNumber: Int()

override func viewDidLoad()
 super.viewDidLoad {

}
    func radiusValue(){
        let user = Auth.auth().currentUser
        guard let uid = user?.uid else{
            return
        }
        let ref = Database.database().reference().child("Users").child(uid)
        ref.observeSingleEvent(of: .value, with: {snapshot in
            print("this is the snapshot value \(snapshot.value)")
            //returns correct value of 14
            if let dictionary = snapshot.value as? [String: AnyObject] {
                self.radiusDistanceNumber = dictionary["radiusDistance"] as? Int

                print(self.radiusDistanceNumber)
                //returns nil
                if self.radiusDistanceNumber == nil {
                    //let the user know it may be an error in connection
                    let alertController = UIAlertController(
                        title: "Error",
                        message: "Data not loading properly, make sure you have a strong connection and try again", preferredStyle: .alert)
                    let cancelAction = UIAlertAction(title: "Got it", style: .cancel, handler: nil)
                    alertController.addAction(cancelAction)
                    self.present(alertController, animated: true, completion: nil)

                } else{
                // pass the value to the slider so the user can see the distance
                let radiusDistanceNumberFloat = Float(self.radiusDistanceNumber!)
                self.radiusSlider.value = radiusDistanceNumberFloat
                self.radiusLabel.text = String(self.radiusSlider.value)
                    }
                }
            })
        }

Again, this code was working weeks ago

Upvotes: 0

Views: 364

Answers (1)

3stud1ant3
3stud1ant3

Reputation: 3606

I think you should make these changes in your code . You are currently declaring the radiusDistanceNumber incorrectly so

Replace

var radiusDistanceNumber: Int()

with

var radiusDistanceNumber = Int()

I think you should also replace

if let dictionary = snapshot.value as? [String: AnyObject]

with

if let dictionary = snapshot.value as? [String: Any]

Upvotes: 1

Related Questions