How to check validity of CLLocation
in iOS?
In fact this is my situation,
I just create a new map
mapView = [[MKMapView alloc] i
As Abizern's comment implies, you shouldn't assume the location will be ready to use immediately after setting showsUserLocation
to YES
.
When the location is available, the map view will call its delegate method didUpdateUserLocation.
(If getting the location fails, the didFailToLocateUserWithError delegate method will be called.)
Outside of the didUpdateUserLocation
method, here are a couple of ways to check if the location is ok to use:
userLocation.location
is nil
. If it is, the location hasn't been obtained yet, it failed, or showsUserLocation
is NO
.nil
, then you can look at the coordinate
property and that can be checked (if you think it might not be valid) using the CLLocationCoordinate2DIsValid function. Note however that coordinate 0,0 is valid (this generally happens when location is nil).I have noticed that even in the didUpdateUserLocation
delegate method, userLocation.location
can be nil
.
This seems to happen when running an app for the first time and after setting showsUserLocation
to YES
. At that point, iOS prompts the user with "Allow app to use your location?" while at the same time the delegate is called (even though the user hasn't yet responded to the prompt and the location hasn't been determined).
So at the top of that delegate method, you should also check if userLocation.location
is nil
.
By the way, in your code you may want to set the delegate before setting showsUserLocation
.