623 Stimmen

Standortdienste funktionieren nicht in iOS 8

Meine App, die mit iOS 7 einwandfrei funktionierte, funktioniert nicht mit dem iOS 8 SDK.

CLLocationManager liefert keinen Standort zurück, und ich sehe meine App auch nicht unter Einstellungen -> Ortungsdienste. Ich habe bei Google nach dem Problem gesucht, aber es kam nichts heraus. Was könnte falsch sein?

4voto

Alok Punkte 22844

Objective-C Vorgehen

Befolge die unten stehenden Anweisungen:

Für iOS 11

Für iOS 11, schau dir diese Antwort an: iOS 11 Standortzugriff

Du musst zwei Schlüssel in die Plist hinzufügen und eine Nachricht wie im unten stehenden Bild bereitstellen:

 1. NSLocationAlwaysAndWhenInUseUsageDescription
 2. NSLocationWhenInUseUsageDescription
 3. NSLocationAlwaysUsageDescription

Geben Sie hier die Bildbeschreibung ein

Für iOS 10 und darunter:

NSLocationWhenInUseUsageDescription

Geben Sie hier die Bildbeschreibung ein

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
if([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
    [locationManager requestWhenInUseAuthorization];
} else {
    [locationManager startUpdatingLocation];
}

Delegierte Methoden

#pragma mark - Lolcation Update
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog(@"didFailWithError: %@", error);
    UIAlertView *errorAlert = [[UIAlertView alloc]
                               initWithTitle:@"Fehler" message:@"Fehler beim Abrufen Ihres Standorts" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];
}
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    switch (status) {
        case kCLAuthorizationStatusNotDetermined:
        case kCLAuthorizationStatusRestricted:
        case kCLAuthorizationStatusDenied:
        {
            // Führe eine Fehlerbehandlung durch
        }
            break;

        default: {
            [locationManager startUpdatingLocation];
        }
            break;
    }
}
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations
{
    CLLocation *location = [locations lastObject];
    userLatitude =  [NSString stringWithFormat:@"%f", location.coordinate.latitude];
    userLongitude = [NSString stringWithFormat:@"%f", location.coordinate.longitude];
    [locationManager stopUpdatingLocation];
}

Swift Vorgehen

Befolge die unten stehenden Anweisungen:

Für iOS 11

Für iOS 11 schau dir diese Antwort an: iOS 11 Standortzugriff

Du musst zwei Keys in die Plist hinzufügen und eine Nachricht wie im unten stehenden Bild bereitstellen:

 1. NSLocationAlwaysAndWhenInUseUsageDescription
 2. NSLocationWhenInUseUsageDescription
 3. NSLocationAlwaysUsageDescription

Geben Sie hier die Bildbeschreibung ein

Für iOS 10 und darunter:

Geben Sie hier die Bildbeschreibung ein

import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
var locationManager = CLLocationManager()

//MARK- Standort aktualisieren
func updateMyLocation() {
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
    if locationManager.respondsToSelector(#selector(CLLocationManager.requestWhenInUseAuthorization)) {
       locationManager.requestWhenInUseAuthorization()
    }
    else {
        locationManager.startUpdatingLocation()
    }
}

Delegierte Methoden

//MARK: Standort Update
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    NSLog("Fehler bei der Aktualisierung des Standorts: %@", error)
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    switch status {
    case .NotDetermined: break
    case .Restricted: break
    case .Denied:
            NSLog("Führe eine Fehlerbehandlung durch")
        break
    default:
        locationManager.startUpdatingLocation()
    }
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
     let location = locations.last! as CLLocation
    var latitude = location.coordinate.latitude
    var longitude = location.coordinate.longitude
}

4voto

Um auf den Benutzerstandort in iOS 8 zuzugreifen, müssen Sie Folgendes hinzufügen:

NSLocationAlwaysUsageDescription in der Info.plist

Das wird den Benutzer um Erlaubnis bitten, ihren aktuellen Standort zu erhalten.

3voto

Derreck Dean Punkte 3568

Für diejenigen, die Xamarin verwenden, musste ich den Schlüssel NSLocationWhenInUseUsageDescription manuell zur info.plist hinzufügen, da er weder in den Dropdowns von Xamarin 5.5.3 Build 6 noch in XCode 6.1 verfügbar war - nur NSLocationUsageDescription war in der Liste vorhanden, und das führte dazu, dass der CLLocationManager weiterhin still scheiterte.

2voto

Prosenjit Goswami Punkte 117
            // ** Vergessen Sie nicht, NSLocationWhenInUseUsageDescription in MyApp-Info.plist hinzuzufügen und ihm einen String zu geben

        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
        // Überprüfen Sie auf iOS 8. Ohne diese Absicherung wird der Code auf iOS 7 mit "Unbekannter Selektor" abstürzen.
        if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [self.locationManager requestWhenInUseAuthorization];
        }
        [self.locationManager startUpdatingLocation];

    // Location Manager Delegate Methods    
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
        NSLog(@"%@", [locations lastObject]);

}

2voto

Marco Punkte 316

Halten Sie die Informationen zu Cocoa Keys immer griffbereit für Updates, hier ist der Link:

https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW26

Viel Spaß.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X