2012-04-13 5 views
1

Ich versuche, die Standortaktualisierungen zu erhalten, insbesondere wenn die Anwendung im Hintergrund ausgeführt wird. Wenn die Anwendung in den Hintergrund eintritt, sollte sie die Standortaktualisierungen für alle n Minuten senden Zuerst versuchte ich mit dem Vordergrund, es funktioniert gut. Ich habe den gleichen Code in die applicationDidEnterBackground kopiert. Ich kann die Standortaktualisierungen nicht drucken. Ich weiß nicht, wo ich geschlagen werde, bitte hilf mir.Standort wird aktualisiert Nur wenn App im Hintergrund ist

in viewDidLoad

- (void)viewDidLoad { 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    [locationManager startUpdatingLocation]; 
} 

und

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    int degrees = newLocation.coordinate.latitude; 
    double decimal = fabs(newLocation.coordinate.latitude - degrees); 
    int minutes = decimal * 60; 
    double seconds = decimal * 3600 - minutes * 60; 
    NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
        degrees, minutes, seconds]; 
    latLabel.text = lat; 
    degrees = newLocation.coordinate.longitude; 
    decimal = fabs(newLocation.coordinate.longitude - degrees); 
    minutes = decimal * 60; 
    seconds = decimal * 3600 - minutes * 60; 
    NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
        degrees, minutes, seconds]; 
    longLabel.text = longt; 
} 

Ich habe versucht, diese Methoden in der AppDelegate einfügen. Es funktioniert nicht :(. Helfen Sie mir

+0

Haben Sie einen Eintrag für UIBackgroundModes für den Standort in Plist erstellt? –

+0

Vielen Dank für die Antwort. Es ist mein Fehler, ich habe vergessen, diesen zu ergänzen. Jetzt ist es hinzugefügt, und ich kann jetzt im Protokoll sehen. – Perseus

Antwort

2

Sie können nicht einfach den Code dort einfügen und erwarten, dass Ihre Anwendung im Hintergrund ausgeführt wird. Sie müssen es als eine App, die im Hintergrund läuft, registrieren. Siehe Abschnitt Die Implementierung Langlaufhintergrundaufgaben in this article

+0

Ich wusste es albern diese Frage zu stellen. Um es sicher zu machen frage ich das. Nach dem Hinzufügen der UIBackgroundModes in der App. Es druckt den Standort jede Minute. Wenn ich das Update alle 10 Minuten ausdrucken möchte, habe ich keine andere Möglichkeit, Hintergrundaufgaben im Hintergrund auszuführen. Habe ich recht ? – Perseus

+0

Sie müssen lange laufende Aufgaben verwenden, wenn Sie erwarten, dass sie länger als 10 Minuten ausgeführt werden. Updates werden asynchron kommen, Sie können das nicht kontrollieren. – borrrden

+0

Können Sie ein bisschen mehr erklären. Bin hier wirklich verwirrt "du bekommst das nicht unter Kontrolle". Weil, wenn ich dieses Update nach 10 Minuten empfange, wünsche ich, dass ich andere Funktion verwenden werde, um die Koordinaten als das Protokoll zu speichern. – Perseus

2

gemäß Diskussion mit Kommentaren, schlug ich vor Ihnen Eintritt in plist zu erstellen.

UIBackgroundModes for location in plist

Und das half.

EDIT

Wenn Sie sich die Koordinate Sie Zeit irgendwo wahrscheinlich in NSUserDefaults sparen müssen. Danach, wenn Sie das nächste Mal zum Protokollieren kommen, müssen Sie den Unterschied zwischen der aktuellen Zeit finden und in NSUserDefaults gespeichert werden. Wenn Intervall das ist, was Sie wollen, protokollieren Sie die Koordinate.

Hoffe, das hilft.

+0

Ja ist es. Jetzt drucken die lat und longt jede Minute. Ich versuche es alle 10 Minuten zu drucken. Hast du irgendeine Idee? – Perseus

+0

Überprüfen Sie die aktualisierte Antwort. –

+0

Wenn dies hilft, bitte akzeptieren Sie es als Antwort, wenn Sie können. –