I get this error when i run my app. Thread 1: Fatal error: Unexpectedly found nil while unwrapping an...
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
Whenever I run my app, it always crashes anywhere it states currentUserID. Not sure why.
I printed the the currentUserID value and its nil.
How can I correct it so it runs my app well. I can share the rest of the code if needed.
import UIKit
import MapKit
import CoreLocation
import Firebase
//import FirebaseDatabase
enum AnnotationType {
case pickup
case destination
case driver
}
enum ButtonAction {
case requestRide
case getDirectionsToPassenger
case getDirectionToDestination
case startTrip
case endTrip
}
class HomeVC: UIViewController, Alertable {
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var centerMapBtn: UIButton!
@IBOutlet weak var destinationTextField: UITextField!
@IBOutlet weak var destinationCircle: UIView!
@IBOutlet weak var cancelBtn: UIButton!
@IBOutlet weak var actionBtn: UIButton!
var delegate: CenterVCDelegate?
var manager: CLLocationManager?
let currentUserId = Auth.auth().currentUser?.uid
// "IRD70YtgEyWRpaH8LkkjHZmjXPo1"
var ref: DatabaseReference!
var regionRadius: CLLocationDistance = 1000
var tableView = UITableView()
var matchingItems: [MKMapItem] = [MKMapItem]()
var route: MKRoute!
var selectedItemPlacemark: MKPlacemark? = nil
var actionForButton: ButtonAction = .requestRide
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
// print(ref.child("users").value(forKey: "users"))
self.ref.child("userse").childByAutoId().setValue("wise")
self.ref.child("users").child("sdsd").setValue("data")
// print(Auth.auth().currentUser?.uid)
// print(currentUserId)
manager = CLLocationManager()
manager?.delegate = self
manager?.desiredAccuracy = kCLLocationAccuracyBest
checkLocationAuthStatus()
mapView.delegate = self
destinationTextField.delegate = self
centerMapOnUserLocation()
DataService.instance.REF_DRIVERS.observe(.value, with: { (snapshot) in
self.loadDriverAnnotationFromFB()
DataService.instance.passengerIsOnTrip(passengerKey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
self.zoom(toFitAnnotationsFromMapView: self.mapView, forActiveTripWithDriver: true, withKey: driverKey)
}
})
})
cancelBtn.alpha = 0.0
UpdateService.instance.observeTrips { (tripDict) in
if let tripDict = tripDict {
let pickupCoordinateArray = tripDict["pickupCoordinate"] as! NSArray
let tripKey = tripDict["passengerKey"] as! String
let acceptanceStatus = tripDict["tripIsAccepted"] as! Bool
if acceptanceStatus == false {
//Broadcast to all driver
DataService.instance.driverIsAvailable(key: self.currentUserId!, handler: { (available) in
//check for errors
if let available = available {
if available == true {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let pickupVC = storyboard.instantiateViewController(withIdentifier: "PickupVC") as? PickupVC
pickupVC?.initData(coordinate: CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees), passengerKey: tripKey)
self.present(pickupVC!, animated: true, completion: nil)
}
}
})
}
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.currentUserId == nil {
print("login")
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (status) in
if status == true {
self.buttonsForDriver(areHidden: true)
}
})
DataService.instance.REF_TRIPS.observe(.childRemoved, with: { (removedTripSnapshot) in
let removedTripDict = removedTripSnapshot.value as? [String: AnyObject]
if removedTripDict?["driverKey"] != nil {
DataService.instance.REF_DRIVERS.child(removedTripDict?["driverKey"] as! String).updateChildValues(["driverIsOnTrip": false])
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (isDriver) in
if isDriver == true {
// Remove Overlays and annotation and hide request ride and cancel button
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
} else {
self.cancelBtn.fadeTo(alphaValue: 0.0, withDuration: 0.2)
self.destinationTextField.isUserInteractionEnabled = true
self.destinationTextField.text = ""
// Remove all map annotation and overlays
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
self.centerMapOnUserLocation()
}
})
})
DataService.instance.driverIsOnTrip(driverkey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
DataService.instance.REF_TRIPS.observeSingleEvent(of: .value, with: { (tripSnapshot) in
if let tripSnapshot = tripSnapshot.children.allObjects as? [DataSnapshot] {
for trip in tripSnapshot {
if trip.childSnapshot(forPath: "driverKey").value as? String == self.currentUserId! {
let pickupCoordinateArray = trip.childSnapshot(forPath: "pickupCoordinate").value as! NSArray
let pickupCoordinate = CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees)
let pickupPlacemark = MKPlacemark(coordinate: pickupCoordinate)
self.dropPinFor(placemark: pickupPlacemark)
self.searchMapKitForResultsWithPolyline(forOriginMapItem: nil, withDestinationMapItem: MKMapItem(placemark: pickupPlacemark))
self.setCustomRegion(forAnnotationType: .pickup, withCoordinate: pickupCoordinate)
self.actionForButton = .getDirectionsToPassenger
self.actionBtn.setTitle("GET DIRECTION", for: .normal)
// Fade in the action button
self.buttonsForDriver(areHidden: false)
}
}
}
})
ios swift firebase mobile
add a comment |
Whenever I run my app, it always crashes anywhere it states currentUserID. Not sure why.
I printed the the currentUserID value and its nil.
How can I correct it so it runs my app well. I can share the rest of the code if needed.
import UIKit
import MapKit
import CoreLocation
import Firebase
//import FirebaseDatabase
enum AnnotationType {
case pickup
case destination
case driver
}
enum ButtonAction {
case requestRide
case getDirectionsToPassenger
case getDirectionToDestination
case startTrip
case endTrip
}
class HomeVC: UIViewController, Alertable {
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var centerMapBtn: UIButton!
@IBOutlet weak var destinationTextField: UITextField!
@IBOutlet weak var destinationCircle: UIView!
@IBOutlet weak var cancelBtn: UIButton!
@IBOutlet weak var actionBtn: UIButton!
var delegate: CenterVCDelegate?
var manager: CLLocationManager?
let currentUserId = Auth.auth().currentUser?.uid
// "IRD70YtgEyWRpaH8LkkjHZmjXPo1"
var ref: DatabaseReference!
var regionRadius: CLLocationDistance = 1000
var tableView = UITableView()
var matchingItems: [MKMapItem] = [MKMapItem]()
var route: MKRoute!
var selectedItemPlacemark: MKPlacemark? = nil
var actionForButton: ButtonAction = .requestRide
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
// print(ref.child("users").value(forKey: "users"))
self.ref.child("userse").childByAutoId().setValue("wise")
self.ref.child("users").child("sdsd").setValue("data")
// print(Auth.auth().currentUser?.uid)
// print(currentUserId)
manager = CLLocationManager()
manager?.delegate = self
manager?.desiredAccuracy = kCLLocationAccuracyBest
checkLocationAuthStatus()
mapView.delegate = self
destinationTextField.delegate = self
centerMapOnUserLocation()
DataService.instance.REF_DRIVERS.observe(.value, with: { (snapshot) in
self.loadDriverAnnotationFromFB()
DataService.instance.passengerIsOnTrip(passengerKey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
self.zoom(toFitAnnotationsFromMapView: self.mapView, forActiveTripWithDriver: true, withKey: driverKey)
}
})
})
cancelBtn.alpha = 0.0
UpdateService.instance.observeTrips { (tripDict) in
if let tripDict = tripDict {
let pickupCoordinateArray = tripDict["pickupCoordinate"] as! NSArray
let tripKey = tripDict["passengerKey"] as! String
let acceptanceStatus = tripDict["tripIsAccepted"] as! Bool
if acceptanceStatus == false {
//Broadcast to all driver
DataService.instance.driverIsAvailable(key: self.currentUserId!, handler: { (available) in
//check for errors
if let available = available {
if available == true {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let pickupVC = storyboard.instantiateViewController(withIdentifier: "PickupVC") as? PickupVC
pickupVC?.initData(coordinate: CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees), passengerKey: tripKey)
self.present(pickupVC!, animated: true, completion: nil)
}
}
})
}
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.currentUserId == nil {
print("login")
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (status) in
if status == true {
self.buttonsForDriver(areHidden: true)
}
})
DataService.instance.REF_TRIPS.observe(.childRemoved, with: { (removedTripSnapshot) in
let removedTripDict = removedTripSnapshot.value as? [String: AnyObject]
if removedTripDict?["driverKey"] != nil {
DataService.instance.REF_DRIVERS.child(removedTripDict?["driverKey"] as! String).updateChildValues(["driverIsOnTrip": false])
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (isDriver) in
if isDriver == true {
// Remove Overlays and annotation and hide request ride and cancel button
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
} else {
self.cancelBtn.fadeTo(alphaValue: 0.0, withDuration: 0.2)
self.destinationTextField.isUserInteractionEnabled = true
self.destinationTextField.text = ""
// Remove all map annotation and overlays
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
self.centerMapOnUserLocation()
}
})
})
DataService.instance.driverIsOnTrip(driverkey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
DataService.instance.REF_TRIPS.observeSingleEvent(of: .value, with: { (tripSnapshot) in
if let tripSnapshot = tripSnapshot.children.allObjects as? [DataSnapshot] {
for trip in tripSnapshot {
if trip.childSnapshot(forPath: "driverKey").value as? String == self.currentUserId! {
let pickupCoordinateArray = trip.childSnapshot(forPath: "pickupCoordinate").value as! NSArray
let pickupCoordinate = CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees)
let pickupPlacemark = MKPlacemark(coordinate: pickupCoordinate)
self.dropPinFor(placemark: pickupPlacemark)
self.searchMapKitForResultsWithPolyline(forOriginMapItem: nil, withDestinationMapItem: MKMapItem(placemark: pickupPlacemark))
self.setCustomRegion(forAnnotationType: .pickup, withCoordinate: pickupCoordinate)
self.actionForButton = .getDirectionsToPassenger
self.actionBtn.setTitle("GET DIRECTION", for: .normal)
// Fade in the action button
self.buttonsForDriver(areHidden: false)
}
}
}
})
ios swift firebase mobile
for all the forced(!) variables you have something is nil. Review DatabaseReference for example.
– Alex Bailey
Nov 23 '18 at 4:39
If you place a breakpoint at the start of viewDidLoad, what is the value of "currentUserId"?
– David Rees
Nov 23 '18 at 4:52
when you call auth may be chances HomeVC is called before authentication and you got currentUserId nil
– Jatin Kathrotiya
Nov 23 '18 at 4:57
Use Exception Breakpoint and you will come to which variable getting nil value
– Manish Mahajan
Nov 23 '18 at 5:30
Possible duplicate of What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
– Tamás Sengel
Nov 23 '18 at 22:41
add a comment |
Whenever I run my app, it always crashes anywhere it states currentUserID. Not sure why.
I printed the the currentUserID value and its nil.
How can I correct it so it runs my app well. I can share the rest of the code if needed.
import UIKit
import MapKit
import CoreLocation
import Firebase
//import FirebaseDatabase
enum AnnotationType {
case pickup
case destination
case driver
}
enum ButtonAction {
case requestRide
case getDirectionsToPassenger
case getDirectionToDestination
case startTrip
case endTrip
}
class HomeVC: UIViewController, Alertable {
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var centerMapBtn: UIButton!
@IBOutlet weak var destinationTextField: UITextField!
@IBOutlet weak var destinationCircle: UIView!
@IBOutlet weak var cancelBtn: UIButton!
@IBOutlet weak var actionBtn: UIButton!
var delegate: CenterVCDelegate?
var manager: CLLocationManager?
let currentUserId = Auth.auth().currentUser?.uid
// "IRD70YtgEyWRpaH8LkkjHZmjXPo1"
var ref: DatabaseReference!
var regionRadius: CLLocationDistance = 1000
var tableView = UITableView()
var matchingItems: [MKMapItem] = [MKMapItem]()
var route: MKRoute!
var selectedItemPlacemark: MKPlacemark? = nil
var actionForButton: ButtonAction = .requestRide
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
// print(ref.child("users").value(forKey: "users"))
self.ref.child("userse").childByAutoId().setValue("wise")
self.ref.child("users").child("sdsd").setValue("data")
// print(Auth.auth().currentUser?.uid)
// print(currentUserId)
manager = CLLocationManager()
manager?.delegate = self
manager?.desiredAccuracy = kCLLocationAccuracyBest
checkLocationAuthStatus()
mapView.delegate = self
destinationTextField.delegate = self
centerMapOnUserLocation()
DataService.instance.REF_DRIVERS.observe(.value, with: { (snapshot) in
self.loadDriverAnnotationFromFB()
DataService.instance.passengerIsOnTrip(passengerKey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
self.zoom(toFitAnnotationsFromMapView: self.mapView, forActiveTripWithDriver: true, withKey: driverKey)
}
})
})
cancelBtn.alpha = 0.0
UpdateService.instance.observeTrips { (tripDict) in
if let tripDict = tripDict {
let pickupCoordinateArray = tripDict["pickupCoordinate"] as! NSArray
let tripKey = tripDict["passengerKey"] as! String
let acceptanceStatus = tripDict["tripIsAccepted"] as! Bool
if acceptanceStatus == false {
//Broadcast to all driver
DataService.instance.driverIsAvailable(key: self.currentUserId!, handler: { (available) in
//check for errors
if let available = available {
if available == true {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let pickupVC = storyboard.instantiateViewController(withIdentifier: "PickupVC") as? PickupVC
pickupVC?.initData(coordinate: CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees), passengerKey: tripKey)
self.present(pickupVC!, animated: true, completion: nil)
}
}
})
}
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.currentUserId == nil {
print("login")
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (status) in
if status == true {
self.buttonsForDriver(areHidden: true)
}
})
DataService.instance.REF_TRIPS.observe(.childRemoved, with: { (removedTripSnapshot) in
let removedTripDict = removedTripSnapshot.value as? [String: AnyObject]
if removedTripDict?["driverKey"] != nil {
DataService.instance.REF_DRIVERS.child(removedTripDict?["driverKey"] as! String).updateChildValues(["driverIsOnTrip": false])
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (isDriver) in
if isDriver == true {
// Remove Overlays and annotation and hide request ride and cancel button
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
} else {
self.cancelBtn.fadeTo(alphaValue: 0.0, withDuration: 0.2)
self.destinationTextField.isUserInteractionEnabled = true
self.destinationTextField.text = ""
// Remove all map annotation and overlays
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
self.centerMapOnUserLocation()
}
})
})
DataService.instance.driverIsOnTrip(driverkey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
DataService.instance.REF_TRIPS.observeSingleEvent(of: .value, with: { (tripSnapshot) in
if let tripSnapshot = tripSnapshot.children.allObjects as? [DataSnapshot] {
for trip in tripSnapshot {
if trip.childSnapshot(forPath: "driverKey").value as? String == self.currentUserId! {
let pickupCoordinateArray = trip.childSnapshot(forPath: "pickupCoordinate").value as! NSArray
let pickupCoordinate = CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees)
let pickupPlacemark = MKPlacemark(coordinate: pickupCoordinate)
self.dropPinFor(placemark: pickupPlacemark)
self.searchMapKitForResultsWithPolyline(forOriginMapItem: nil, withDestinationMapItem: MKMapItem(placemark: pickupPlacemark))
self.setCustomRegion(forAnnotationType: .pickup, withCoordinate: pickupCoordinate)
self.actionForButton = .getDirectionsToPassenger
self.actionBtn.setTitle("GET DIRECTION", for: .normal)
// Fade in the action button
self.buttonsForDriver(areHidden: false)
}
}
}
})
ios swift firebase mobile
Whenever I run my app, it always crashes anywhere it states currentUserID. Not sure why.
I printed the the currentUserID value and its nil.
How can I correct it so it runs my app well. I can share the rest of the code if needed.
import UIKit
import MapKit
import CoreLocation
import Firebase
//import FirebaseDatabase
enum AnnotationType {
case pickup
case destination
case driver
}
enum ButtonAction {
case requestRide
case getDirectionsToPassenger
case getDirectionToDestination
case startTrip
case endTrip
}
class HomeVC: UIViewController, Alertable {
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var centerMapBtn: UIButton!
@IBOutlet weak var destinationTextField: UITextField!
@IBOutlet weak var destinationCircle: UIView!
@IBOutlet weak var cancelBtn: UIButton!
@IBOutlet weak var actionBtn: UIButton!
var delegate: CenterVCDelegate?
var manager: CLLocationManager?
let currentUserId = Auth.auth().currentUser?.uid
// "IRD70YtgEyWRpaH8LkkjHZmjXPo1"
var ref: DatabaseReference!
var regionRadius: CLLocationDistance = 1000
var tableView = UITableView()
var matchingItems: [MKMapItem] = [MKMapItem]()
var route: MKRoute!
var selectedItemPlacemark: MKPlacemark? = nil
var actionForButton: ButtonAction = .requestRide
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
// print(ref.child("users").value(forKey: "users"))
self.ref.child("userse").childByAutoId().setValue("wise")
self.ref.child("users").child("sdsd").setValue("data")
// print(Auth.auth().currentUser?.uid)
// print(currentUserId)
manager = CLLocationManager()
manager?.delegate = self
manager?.desiredAccuracy = kCLLocationAccuracyBest
checkLocationAuthStatus()
mapView.delegate = self
destinationTextField.delegate = self
centerMapOnUserLocation()
DataService.instance.REF_DRIVERS.observe(.value, with: { (snapshot) in
self.loadDriverAnnotationFromFB()
DataService.instance.passengerIsOnTrip(passengerKey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
self.zoom(toFitAnnotationsFromMapView: self.mapView, forActiveTripWithDriver: true, withKey: driverKey)
}
})
})
cancelBtn.alpha = 0.0
UpdateService.instance.observeTrips { (tripDict) in
if let tripDict = tripDict {
let pickupCoordinateArray = tripDict["pickupCoordinate"] as! NSArray
let tripKey = tripDict["passengerKey"] as! String
let acceptanceStatus = tripDict["tripIsAccepted"] as! Bool
if acceptanceStatus == false {
//Broadcast to all driver
DataService.instance.driverIsAvailable(key: self.currentUserId!, handler: { (available) in
//check for errors
if let available = available {
if available == true {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let pickupVC = storyboard.instantiateViewController(withIdentifier: "PickupVC") as? PickupVC
pickupVC?.initData(coordinate: CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees), passengerKey: tripKey)
self.present(pickupVC!, animated: true, completion: nil)
}
}
})
}
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.currentUserId == nil {
print("login")
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (status) in
if status == true {
self.buttonsForDriver(areHidden: true)
}
})
DataService.instance.REF_TRIPS.observe(.childRemoved, with: { (removedTripSnapshot) in
let removedTripDict = removedTripSnapshot.value as? [String: AnyObject]
if removedTripDict?["driverKey"] != nil {
DataService.instance.REF_DRIVERS.child(removedTripDict?["driverKey"] as! String).updateChildValues(["driverIsOnTrip": false])
}
DataService.instance.userIsDriver(userKey: self.currentUserId!, handler: { (isDriver) in
if isDriver == true {
// Remove Overlays and annotation and hide request ride and cancel button
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
} else {
self.cancelBtn.fadeTo(alphaValue: 0.0, withDuration: 0.2)
self.destinationTextField.isUserInteractionEnabled = true
self.destinationTextField.text = ""
// Remove all map annotation and overlays
self.removeOverlaysAndAnnotations(forDrivers: false, forPassengers: true)
self.centerMapOnUserLocation()
}
})
})
DataService.instance.driverIsOnTrip(driverkey: self.currentUserId!, handler: { (isOnTrip, driverKey, tripKey) in
if isOnTrip == true {
DataService.instance.REF_TRIPS.observeSingleEvent(of: .value, with: { (tripSnapshot) in
if let tripSnapshot = tripSnapshot.children.allObjects as? [DataSnapshot] {
for trip in tripSnapshot {
if trip.childSnapshot(forPath: "driverKey").value as? String == self.currentUserId! {
let pickupCoordinateArray = trip.childSnapshot(forPath: "pickupCoordinate").value as! NSArray
let pickupCoordinate = CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! CLLocationDegrees, longitude: pickupCoordinateArray[1] as! CLLocationDegrees)
let pickupPlacemark = MKPlacemark(coordinate: pickupCoordinate)
self.dropPinFor(placemark: pickupPlacemark)
self.searchMapKitForResultsWithPolyline(forOriginMapItem: nil, withDestinationMapItem: MKMapItem(placemark: pickupPlacemark))
self.setCustomRegion(forAnnotationType: .pickup, withCoordinate: pickupCoordinate)
self.actionForButton = .getDirectionsToPassenger
self.actionBtn.setTitle("GET DIRECTION", for: .normal)
// Fade in the action button
self.buttonsForDriver(areHidden: false)
}
}
}
})
ios swift firebase mobile
ios swift firebase mobile
edited Nov 23 '18 at 5:34
Rajesh Pandya
1,34641021
1,34641021
asked Nov 23 '18 at 4:30
Wise OsagieWise Osagie
194
194
for all the forced(!) variables you have something is nil. Review DatabaseReference for example.
– Alex Bailey
Nov 23 '18 at 4:39
If you place a breakpoint at the start of viewDidLoad, what is the value of "currentUserId"?
– David Rees
Nov 23 '18 at 4:52
when you call auth may be chances HomeVC is called before authentication and you got currentUserId nil
– Jatin Kathrotiya
Nov 23 '18 at 4:57
Use Exception Breakpoint and you will come to which variable getting nil value
– Manish Mahajan
Nov 23 '18 at 5:30
Possible duplicate of What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
– Tamás Sengel
Nov 23 '18 at 22:41
add a comment |
for all the forced(!) variables you have something is nil. Review DatabaseReference for example.
– Alex Bailey
Nov 23 '18 at 4:39
If you place a breakpoint at the start of viewDidLoad, what is the value of "currentUserId"?
– David Rees
Nov 23 '18 at 4:52
when you call auth may be chances HomeVC is called before authentication and you got currentUserId nil
– Jatin Kathrotiya
Nov 23 '18 at 4:57
Use Exception Breakpoint and you will come to which variable getting nil value
– Manish Mahajan
Nov 23 '18 at 5:30
Possible duplicate of What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
– Tamás Sengel
Nov 23 '18 at 22:41
for all the forced(!) variables you have something is nil. Review DatabaseReference for example.
– Alex Bailey
Nov 23 '18 at 4:39
for all the forced(!) variables you have something is nil. Review DatabaseReference for example.
– Alex Bailey
Nov 23 '18 at 4:39
If you place a breakpoint at the start of viewDidLoad, what is the value of "currentUserId"?
– David Rees
Nov 23 '18 at 4:52
If you place a breakpoint at the start of viewDidLoad, what is the value of "currentUserId"?
– David Rees
Nov 23 '18 at 4:52
when you call auth may be chances HomeVC is called before authentication and you got currentUserId nil
– Jatin Kathrotiya
Nov 23 '18 at 4:57
when you call auth may be chances HomeVC is called before authentication and you got currentUserId nil
– Jatin Kathrotiya
Nov 23 '18 at 4:57
Use Exception Breakpoint and you will come to which variable getting nil value
– Manish Mahajan
Nov 23 '18 at 5:30
Use Exception Breakpoint and you will come to which variable getting nil value
– Manish Mahajan
Nov 23 '18 at 5:30
Possible duplicate of What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
– Tamás Sengel
Nov 23 '18 at 22:41
Possible duplicate of What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
– Tamás Sengel
Nov 23 '18 at 22:41
add a comment |
1 Answer
1
active
oldest
votes
There are a few issues that should be addressed and then a core issue.
The first thing is that Auth.auth().currentUser? is an optional - meaning that it could have a value or could be nil. Doing this..
let currentUserId = Auth.auth().currentUser?.uid
is telling your code that no matter if its got a value or nil, attempt to assign the .uid to currentUserId.
Protect your code by safely unwrapping options
guard let currentUser = Auth.auth().currentUser else {return}
//now you can access currentUser as it won't be nil
or
if let currentUser = Auth.auth().currentUser {
print("user is authenticated and currentUser is not nil")
} else {
print("not authenticated")
}
Now the core of the issue is, as far as I can see, you're not authenticating the user at all and that needs to happen prior to accessing Auth.auth().currentUser
Here's a complete authentication function with error handling
func authUser(user: String, pw: String) {
Auth.auth().signIn(withEmail: user, password: pw, completion: { (auth, error) in
if let x = error {
let err = x as NSError
switch err.code {
case AuthErrorCode.wrongPassword.rawValue:
print("wrong password")
case AuthErrorCode.invalidEmail.rawValue:
print("invalued email")
default:
print("unknown error")
}
} else {
if let user = auth?.user { //note; safely unwrap optional
print("uid: (user.uid)")
}
}
})
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440677%2fi-get-this-error-when-i-run-my-app-thread-1-fatal-error-unexpectedly-found-ni%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
There are a few issues that should be addressed and then a core issue.
The first thing is that Auth.auth().currentUser? is an optional - meaning that it could have a value or could be nil. Doing this..
let currentUserId = Auth.auth().currentUser?.uid
is telling your code that no matter if its got a value or nil, attempt to assign the .uid to currentUserId.
Protect your code by safely unwrapping options
guard let currentUser = Auth.auth().currentUser else {return}
//now you can access currentUser as it won't be nil
or
if let currentUser = Auth.auth().currentUser {
print("user is authenticated and currentUser is not nil")
} else {
print("not authenticated")
}
Now the core of the issue is, as far as I can see, you're not authenticating the user at all and that needs to happen prior to accessing Auth.auth().currentUser
Here's a complete authentication function with error handling
func authUser(user: String, pw: String) {
Auth.auth().signIn(withEmail: user, password: pw, completion: { (auth, error) in
if let x = error {
let err = x as NSError
switch err.code {
case AuthErrorCode.wrongPassword.rawValue:
print("wrong password")
case AuthErrorCode.invalidEmail.rawValue:
print("invalued email")
default:
print("unknown error")
}
} else {
if let user = auth?.user { //note; safely unwrap optional
print("uid: (user.uid)")
}
}
})
}
add a comment |
There are a few issues that should be addressed and then a core issue.
The first thing is that Auth.auth().currentUser? is an optional - meaning that it could have a value or could be nil. Doing this..
let currentUserId = Auth.auth().currentUser?.uid
is telling your code that no matter if its got a value or nil, attempt to assign the .uid to currentUserId.
Protect your code by safely unwrapping options
guard let currentUser = Auth.auth().currentUser else {return}
//now you can access currentUser as it won't be nil
or
if let currentUser = Auth.auth().currentUser {
print("user is authenticated and currentUser is not nil")
} else {
print("not authenticated")
}
Now the core of the issue is, as far as I can see, you're not authenticating the user at all and that needs to happen prior to accessing Auth.auth().currentUser
Here's a complete authentication function with error handling
func authUser(user: String, pw: String) {
Auth.auth().signIn(withEmail: user, password: pw, completion: { (auth, error) in
if let x = error {
let err = x as NSError
switch err.code {
case AuthErrorCode.wrongPassword.rawValue:
print("wrong password")
case AuthErrorCode.invalidEmail.rawValue:
print("invalued email")
default:
print("unknown error")
}
} else {
if let user = auth?.user { //note; safely unwrap optional
print("uid: (user.uid)")
}
}
})
}
add a comment |
There are a few issues that should be addressed and then a core issue.
The first thing is that Auth.auth().currentUser? is an optional - meaning that it could have a value or could be nil. Doing this..
let currentUserId = Auth.auth().currentUser?.uid
is telling your code that no matter if its got a value or nil, attempt to assign the .uid to currentUserId.
Protect your code by safely unwrapping options
guard let currentUser = Auth.auth().currentUser else {return}
//now you can access currentUser as it won't be nil
or
if let currentUser = Auth.auth().currentUser {
print("user is authenticated and currentUser is not nil")
} else {
print("not authenticated")
}
Now the core of the issue is, as far as I can see, you're not authenticating the user at all and that needs to happen prior to accessing Auth.auth().currentUser
Here's a complete authentication function with error handling
func authUser(user: String, pw: String) {
Auth.auth().signIn(withEmail: user, password: pw, completion: { (auth, error) in
if let x = error {
let err = x as NSError
switch err.code {
case AuthErrorCode.wrongPassword.rawValue:
print("wrong password")
case AuthErrorCode.invalidEmail.rawValue:
print("invalued email")
default:
print("unknown error")
}
} else {
if let user = auth?.user { //note; safely unwrap optional
print("uid: (user.uid)")
}
}
})
}
There are a few issues that should be addressed and then a core issue.
The first thing is that Auth.auth().currentUser? is an optional - meaning that it could have a value or could be nil. Doing this..
let currentUserId = Auth.auth().currentUser?.uid
is telling your code that no matter if its got a value or nil, attempt to assign the .uid to currentUserId.
Protect your code by safely unwrapping options
guard let currentUser = Auth.auth().currentUser else {return}
//now you can access currentUser as it won't be nil
or
if let currentUser = Auth.auth().currentUser {
print("user is authenticated and currentUser is not nil")
} else {
print("not authenticated")
}
Now the core of the issue is, as far as I can see, you're not authenticating the user at all and that needs to happen prior to accessing Auth.auth().currentUser
Here's a complete authentication function with error handling
func authUser(user: String, pw: String) {
Auth.auth().signIn(withEmail: user, password: pw, completion: { (auth, error) in
if let x = error {
let err = x as NSError
switch err.code {
case AuthErrorCode.wrongPassword.rawValue:
print("wrong password")
case AuthErrorCode.invalidEmail.rawValue:
print("invalued email")
default:
print("unknown error")
}
} else {
if let user = auth?.user { //note; safely unwrap optional
print("uid: (user.uid)")
}
}
})
}
answered Nov 24 '18 at 14:03
JayJay
19.5k43353
19.5k43353
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440677%2fi-get-this-error-when-i-run-my-app-thread-1-fatal-error-unexpectedly-found-ni%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
for all the forced(!) variables you have something is nil. Review DatabaseReference for example.
– Alex Bailey
Nov 23 '18 at 4:39
If you place a breakpoint at the start of viewDidLoad, what is the value of "currentUserId"?
– David Rees
Nov 23 '18 at 4:52
when you call auth may be chances HomeVC is called before authentication and you got currentUserId nil
– Jatin Kathrotiya
Nov 23 '18 at 4:57
Use Exception Breakpoint and you will come to which variable getting nil value
– Manish Mahajan
Nov 23 '18 at 5:30
Possible duplicate of What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
– Tamás Sengel
Nov 23 '18 at 22:41