2016-05-31 22 views
0

Ich habe ein Problem mit Benutzer Standorten in Ziel C. Ich habe versucht alles, was ich hier in Stackoverflow finden konnte, aaaand, hat nicht funktioniert.Ort Autorisierung Problem in Objective C

So habe ich diesen Code:

-(void)setLocation 
{ 
    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    MKPointAnnotation *myAnnotation = [[MKPointAnnotation alloc]init]; 


    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 
    locationManager.distanceFilter = 10.0; 
    [locationManager startUpdatingLocation]; 
    [locationManager requestWhenInUseAuthorization]; 
    [locationManager requestAlwaysAuthorization]; 



    myAnnotation.coordinate = mapView.userLocation.location.coordinate; 

    myAnnotation.title = @"Test"; 
    myAnnotation.subtitle = @"I am a test Subtitle"; 

    [self.mapView addAnnotation:myAnnotation]; 
} 

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { 
    [self.mapView setCenterCoordinate:userLocation.coordinate animated:YES]; 
} 

Alles ist in ViewController.m, genauer gesagt in einem mapView in meinem .h-Datei deklariert:

@property (strong, nonatomic) IBOutlet MKMapView *mapView; 

Hat jemand eine Idee? Der Fehler, den ich habe, ist, dass:

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first. 

Thanks :)

+0

Haben Sie vergessen, die richtigen Schlüsselwerte in info.plist einzustellen? http://stackoverflow.com/a/24064860/653513 –

+0

Ich werde tun, was Sie sagten. Ich habe so etwas in anderen Posts gesehen, aber da ich es nicht verstanden habe, nun ... Ich hoffte es war nicht wichtig. Ich sollte meiner Intuition niemals vertrauen. Danke trotzdem :) –

+0

Edit: Ok, ich habe gerade versucht, einige Möglichkeiten vorgeschlagen in der Post, die Sie verknüpft und nichts funktioniert. Ich habe eine Nachricht auf meiner Anwendung lauching, «Diese Anwendung erfordert Standortdienste ...» so erkannte ich die Zeile hinzugefügt. Aber immer noch ist die Fehlermeldung hier, und nichts hat sich geändert. Ich habe versucht, den einen und den anderen Satz, versuchte ich beide, und 5 Requisiten der Beiträge. –

Antwort

0

Ich kann nicht schreiben dies als Kommentar hinzuzufügen, so hier, ich werde es posten.

Sie können einfach Ihre Info.plist Datei in TextEdit öffnen und diese Zeilen hinzufügen.

<key>UIBackgroundModes</key> 
<array> 
    <string>location</string> 
    <string>external-accessory</string> 
    <string>remote-notification</string> 
</array> 
<key>NSLocationUsageDescription</key> 
<string>App needs to use GPS to keep track of your activity</string> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string>App needs to use GPS to keep track of your activity</string> 
<key>UIRequiredDeviceCapabilities</key> 
<array> 
    <string>armv7</string> 
    <string>gps</string> 
</array> 

EDIT:

Ich sehe, dass Ihr locationManager ist eine lokale Methode variabel. Es sollte als Instanzvariable oder als Eigenschaft deklariert werden.

+0

Rofl. Ich musste nicht einmal meine Info.plist-Datei bearbeiten (in dem Wissen, dass ich bereits die NSLocationsomething-Zeile darin eingefügt hatte). Es ging nur um meinen locationManager, der keine lokale Methodenvariable war. Danke vielmals. Wie wirklich, sehr viel. –

+0

Froh, dass es funktioniert :) –

0

Schauen Sie sich die folgenden Zeilen

[locationManager startUpdatingLocation]; 
[locationManager requestWhenInUseAuthorization]; 
[locationManager requestAlwaysAuthorization]; 

ein Fehler sagt, dass Sie nur die Standortaktualisierungen gestartet, ohne für die Lage Genehmigung auffordert.

Sie starten die Standortaktualisierung, bevor Sie nach der Standortautorisierung gefragt werden. Die Reihenfolge dieser Zeilen ist also falsch.

1) Benutzer nach Standortaktualisierung

2) und starten Sie dann Update Lage

So Ihr Code in folgenden Reihenfolge sein sollte.

//1 
[locationManager requestWhenInUseAuthorization]; 
[locationManager requestAlwaysAuthorization]; 

//2 
[locationManager startUpdatingLocation]; 

Vergessen Sie nicht, NSLocationAlwaysUsageDescription oder NSLocationWhenInUseUsageDescription Schlüssel in Info.plist

+0

Ich habe gerade meinen Code als Ihren geändert und funktioniert immer noch nicht. Ich werde den "info.plist" Weg erforschen, ich habe keine Ahnung worum es geht. Trotzdem danke: D –

+0

@ AdèleDunand, es ist Pflicht, einen der oben genannten Schlüssel in Info hinzuzufügen.Datei von iOS 8 plisten, um auf den aktuellen Standort des Benutzers zuzugreifen. [Sieh dir dieses Bild an] (http://i.stack.imgur.com/iuOzB.jpg) und lies [diese Antwort] (http://stackoverflow.com/questions/24062509/location-services-not-working-) in-ios-8 # Antwort-24063578). – Mahesh

+0

ist es genau die Post, die ich gelesen habe, und die Zeile, die ich hinzugefügt habe :) Aber das Problem war mehr über ... auch die Stuhl/Tastatur-Schnittstelle –