CLLocationManager startUpdatingLocation ruft nicht locationManager auf: didUpdateLocations: oder locationManager: didFailWithError:
Ich versuche, die CLLocationManager
Rahmen meiner iOS-Projekt Zugriff auf den Standort des Benutzers, aber wenn ich call
[locationManager startUpdatingLocation]
weder locationManager:didUpdateLocations:
oder locationManager:didFailWithError:
werden immer genannt.
//myViewController.h
@interface myViewController : UITableViewController <CLLocationManagerDelegate>
@end
//myViewController.m
@implementation myViewController{
CLLocationManager *locationManager;
}
//edit
- (void)viewDidLoad
{
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
}
//finish edit
-(void)getLocation
{
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error"
message:@"Failed to Get Your Location"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[errorAlert show];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *newLocation = locations[[locations count] -1];
CLLocation *currentLocation = newLocation;
NSString *longitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
NSString *latitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
if (currentLocation != nil) {
NSLog(@"latitude: %@", latitude);
NSLog(@"longitude: @"%@", longitude);
}else {
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[errorAlert show];
}
}
@end
Weder delegate-Methode wird aufgerufen, trotz allem, was es sagt in der Dokumentation:
"Diese Methode gibt sofort einen Wert zurück. Der Aufruf dieser Methode veranlasst den location manager zu einer ersten Position fixieren (das kann einige Sekunden dauern) und Benachrichtigen Sie Ihren Delegaten aufrufen locationManager:didUpdateLocations:
Methode [...] zusätzlich zu Ihrer Stellvertretung ein Objekt der Umsetzung der locationManager:didUpdateLocations:
Methode, sollte es auch umsetzen locationManager:didFailWithError:
Methode zum reagieren auf mögliche Fehler."
Nicht wissen, wie man die debug-Ausgabe.
Dank,
JA
InformationsquelleAutor der Frage ja. | 2014-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einfach diese in der info.plist
NSLocationAlwaysUsageDescription --- ich brauche Lage
NSLocationWhenInUseUsageDescription --- ich brauche Lage
privacy - location usage description --- ich brauche Lage
Nun ruft Ihr didUpdateToLocation auf jeden Fall.
für mehr details klicken Sie hier
InformationsquelleAutor der Antwort Mohit tomar
Location Services arbeiten ein bisschen anders ab iOS 8.
Hauptsächlich, müssen Sie einen Schlüssel
NSLocationWhenInUseUsageDescription
zu Ihrem Info.plist - Datei, und fügen Sie eine Beschreibung hinzu, warum Ihre app benötigt Lage, wie "Standort benötigt, um zu ...".Beachten Sie, dass Sie möglicherweise auch zu prüfen, für die iOS version. Nur iOS 8 und bis die Location Manager hören
requestWhenInUseAuthorization
nennen.Den link unten, zeigt mehr details:
http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/
Glück!
InformationsquelleAutor der Antwort Emilio Barcelos
Sie dringend brauchen, um zu überprüfen, dass Sie initialisieren CLLocationManager auf Haupt-thread.
Im anderen Fall werden Sie nicht bekommen updateLocation Veranstaltung.
Kann ich nicht finden, solche Infos in den Apple-docs, aber es funktioniert für mich trotzdem.
InformationsquelleAutor der Antwort malex
Mit iOS 8.0 müssen Sie rufen Sie
-[CLLocationManager requestWhenInUseAuthorization
oder]
-[CLLocationManager requestAlwaysAuthorization]
ersten, so erhält der Benutzer gebeten, Ihre app die Berechtigung zur Verwendung der Ort.InformationsquelleAutor der Antwort orkoden
Müssen Sie unten Dinge zu Ihrem Projekt,
In der plist von Ihrem Projekt hinzufügen, diese Dinge:
Key: NSLocationAlwaysUsageDescription Type:String
Key: NSLocationWhenInUseUsageDescription Type:String
In der .m-Datei mit
[locationManager startUpdatingLocation]
fügen Sie diese Bedingung :Dann nur Ihre
CLLocationManager
delegate-Methoden aufgerufen werden.InformationsquelleAutor der Antwort Bhavin Trivedi
Ich denke, Sie sollten überprüfen Sie diesen link.Sie sind nicht für die Beibehaltung der Standort-manager-Objekt bei der Deklaration.
bitte geben Sie Eigenschaft, um Ihr Objekt
@property(nonatomic, strong)
Warum die CLLocationManager delegieren ist nicht immer genannt, der im iPhone SDK 4.0?
InformationsquelleAutor der Antwort Dheeraj Kumar
Hatte ich Folgendes in meinen code base:
Stellt sich heraus, dass dies immer aufgerufen in einer Endlosschleife, da die Initialisierung einer locationManager löst diese Methode für einige Grund? Ich hatte nicht realisiert, dass. Ich hatte es zu fangen, wenn die Berechtigungen erteilt wurden. Stattdessen habe ich einen location manager und begann die Aktualisierung der Position, aber dann gefeuert und ersetzt es durch eines, das war nicht die Aktualisierung der Lage und gehalten, looping über und über.
Lösung war für mich nur hinzufügen
&& !_locationManager
zu der if-Bedingung.InformationsquelleAutor der Antwort Jake T.