CLLocationManager startUpdatingLocation nicht funktioniert
So, ich bin jetzt immer mindestens Rückrufe mit dem folgenden code...
- (void)viewDidLoad {
[super viewDidLoad];
mapView=[[MKMapView alloc] initWithFrame:self.view.frame];
//mapView.showsUserLocation=TRUE;
mapView.delegate=self;
[self.view insertSubview:mapView atIndex:0];
NSLog(@"locationServicesEnabled: %@", [CLLocationManager locationServicesEnabled] ? @"YES":@"NO");
CLLocationManager *newLocationManager = [[CLLocationManager alloc] init];
[newLocationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[newLocationManager setDistanceFilter:kCLDistanceFilterNone];
[self setLocationManager:newLocationManager];
[[self locationManager] setDelegate:self];
[[self locationManager] startUpdatingLocation];
NSLog(@"Started updating Location");
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSLog(@"Did update to location");
mStoreLocationButton.hidden=FALSE;
location=newLocation.coordinate;
MKCoordinateRegion region;
region.center=location;
MKCoordinateSpan span;
span.latitudeDelta=0.01;
span.longitudeDelta=0.01;
region.span=span;
[mapView setRegion:region animated:TRUE];
}
Kann ich die Haltepunkte in der zweiten Methode und NSLog ist die Berichterstattung ständige location updates, aber aus irgendeinem Grund ist der zoom mit span nicht funktioniert. Irgendeine Idee warum? Es hat meine Koordinaten und alles. Art kratzen meinen Kopf auf diese.
- ur-code scheint ok.. problem ist smwhere anderes
- Haben Sie diese Probleme in den simulator ? Haben Sie aktiviert die simulation des Standorts ?
- Ja, simulator Probleme. Ich habe aktiviert-simulation Standort. Vielleicht brauche ich, um es zu testen auf einem Gerät.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weisen Sie den CLLocationManager zu einer (starken) Eigentum auf Ihre Klasse. (Ich nehme an, du bist mit der ARC BTW.) Jetzt den CLLocationManager lebt nicht hinter dem Ende der viewDidLoad-Methode, so daß Sie nicht zu rufen, Ihre Delegat-Methode.
Stellen Sie sicher, dass Sie Hinzugefügt haben
<CLLocationManagerDelegate>
im@interface
Datei.Bearbeiten:
Wenn der Delegat richtig eingestellt ist, stellen Sie sicher, dass Sie mit Ihrem
locationManager
Eigenschaft:In der
.h
Datei:In
viewDidLoad
:Ich denke, Sie können diese Arbeit von zwei Arten:
Überprüfen, die Sie angenommen haben, den ViEWController mit CLLocationManagerDelegate Methoden
In Der ViewController.m:
2.Mit der gleichen MKMapKit Rahmen
Sie können dies tun, indem Sie mit der MKMapViewDelegate Methode namens didUpdateUserLocation:
Hier brauchen Sie nicht die CLLocaionManager,
Dies erfolgt durch:
In Der ViewController.h:
und In ViewController.m-Datei:
Also, zuerst von allen, können Sie nie sicher sein, dass der Standort-manager in der Lage ist, ein update der Lage in den ersten Platz. Es könnte sein, ein Fehler beim update oder Sie haben keinen Zugriff auf den Benutzerstandort.
Umsetzung dieser CLLocationManager delegate-Methode, und überprüfen Sie die Fehler.
Wenn Sie diese in den simulator, nur müssen Sie möglicherweise auffordern, es zu ändern-Koordinaten. In Xcode gibt es eine bar, oben die debug-Ausgabe-Bereich mit dem typischen Ort Dienstleistungen Pfeil. Daneben ist ein drop-down-Liste mit den Orten. Wenn Ihre app ausgeführt wird, wechseln Sie die Position es ist die Simulation und sehen, ob das ändern löst Ihr code. Dann testen Sie es auf einem echten Gerät.
In meinem Fall, es nicht geben auf didChangeAuthorization. Ich war versucht, auf einem echten Gerät.
Ich gelöscht, die Anwendung aus dem Telefon, und installieren Sie es erneut. Und es funktioniert!
Hoffe, das jemand hilft 🙂
Für Swift 3
Die Methode hat sich verändert:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
aus:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]!)
Bemerken, dass das '_' und die Besetzung von 'Standorten' zu [CLLocation] statt [AnyObject]!
Wenn Sie die alte Methode wird nie aufgerufen werden, und Sie erhalten keine Warnung, dass er sich verändert hat.