2016-08-07 22 views
0

Also ich habe keine Ahnung, was passiert ist. Der Code, den ich hatte, funktionierte perfekt, und dann arbeitete ich ein bisschen im Storyboard herum und plötzlich fing ich an, den Fehler zu bekommen, dass meine CLLocation beim Auspacken immer Null war. Ich habe alles gemacht, woran ich denken oder online lesen kann.CLLocation Manager verwendet den Standardstandort und aktualisiert sich nicht mit dem tatsächlichen Standort

  • hinzugefügt
  • kopierten Code in verschiedenen Spots .plist
  • die didUpdateLocations in viewDidLoad bewegt

Wenn ich das Schema aktualisieren, um einen Standard-Speicherort haben dann die Sie verwendet nur die Standard-Speicherort die ganze Zeit und nie aktualisiert mit meinem aktuellen Standort, gleich, wenn ich es auf einem tatsächlichen Gerät versuche, aber wenn ich es zu niemandem lasse, dann wird die Delegiertenmethode für den Fehler didFailWithError genannt, sagend, dass der zurückgegebene Wert Null war. Ich verliere es hier drüben. Bitte Hilfe.

enter image description here

enter image description here enter image description here

override func viewDidLoad() { 
     super.viewDidLoad() 

     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.distanceFilter = kCLDistanceFilterNone 
     self.locationManager.requestWhenInUseAuthorization() 
     self.locationManager.startUpdatingLocation() 

     } 


func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
     print("In the location, seems we got some shit --> didFailWithError: \(error.description)") 

     } 
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     let locValue : CLLocationCoordinate2D = locationManager.location!.coordinate 
     let geoFire = GeoFire(firebaseRef: self.geofireRef.child("Posts")) 

     let center = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude) 

     let circleQuery = geoFire.queryAtLocation(center, withRadius: 10) 

     circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 
      print("Key '\(key)' entered the search area and is at location '\(location)'") 
     }) 

     self.locationManager.stopUpdatingLocation() 

    } 
+1

Sie sind für bedeutende Standortänderungen überwachen. Diese treten erst nach einiger Zeit auf. Sie sind sich dessen bewusst? Im Simulator kann es bis zu 5 Minuten dauern, bis Updates angezeigt werden. Diese können sehr ungenau sein und Sie werden keine Updates sofort sehen. Probieren Sie es ohne signifikante Standortänderungen aus. Ich würde auch alles auf den didupdateLocations zuerst behandeln, bevor ich es stoppe. – Wouter125

+0

Ich wusste das nicht, aber das waren nur zusätzliche Versuche, irgendetwas zu versuchen. Nach Änderung nach deinem Vorschlag habe ich immer noch das gleiche Problem. – KellysOnTop23

+0

Ich habe meinen Code aktualisiert, habe aber immer noch das gleiche Problem – KellysOnTop23

Antwort

1

das folgende Stück Code ausführen:

import UIKit 
import CoreLocation 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { 
    var locationManager = CLLocationManager() 
    var mapView = MKMapView() 
    var screenSize = UIScreen.mainScreen().bounds 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.distanceFilter = kCLDistanceFilterNone 
     self.locationManager.requestWhenInUseAuthorization() 
     self.locationManager.startUpdatingLocation() 

     mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height)) 
     mapView.showsUserLocation = true 
     mapView.delegate = self 
     view.addSubview(mapView) 

     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
     print("In the location, seems we got some error \(error.description)") 
    } 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let locValue : CLLocationCoordinate2D = locationManager.location!.coordinate 
     let center = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude) 
     let region = MKCoordinateRegionMakeWithDistance(locValue, 2000, 2000) 
     mapView.setRegion(region, animated: true) 
     mapView.centerCoordinate = locValue 
     print(center) 
    } 
} 

Einstellen der Anforderungen im Info.plist natürlich und damit den Standort Simulator im Debug-Menü Abschnitt :

location simulator

gibt mir die folgende Ausgabe:

<+37.33756603,-122.04120235> +/- 0.00m (speed -1.00 mps/course -1.00) @ 8/7/16, 11:27:25 PM Central European Summer Time 
<+37.33756603,-122.04120235> +/- 0.00m (speed -1.00 mps/course -1.00) @ 8/7/16, 11:27:26 PM Central European Summer Time 
+0

Also, wenn der Simulator eingeschaltet ist, wird der Standort auf keine festgelegt, wie bekomme ich die Einstellung immer?Aber selbst dann habe ich meinen Standort online angeschaut und die Koordinaten passen nicht zu dem, was CLLocation meldet. Irgendwelche Gedanken? – KellysOnTop23

+0

Aus irgendeinem Grund, wenn ich das Projekt starte und auf Debug -> Standorte simulieren gehe, wird das "Standort nicht simulieren" angekreuzt, aber wenn ich es öffne, wenn die App nicht läuft, ist alles grau und "Simuliere nicht Standort "ist deaktiviert. Wie höre ich das auf !!! Ich fühle mich wie wir sind so nah !!! – KellysOnTop23

+0

Ja, der Simulator simuliert nicht Ihren aktuellen Standort. Es simuliert eine grundlegende vordefinierte Standardroute um den Apple Campus herum. Wenn Sie Ihren eigenen Standort möchten, müssen Sie Ihr Gerät verwenden. Und Sie können den Standort nur in Ihrer App simulieren. Nicht, wenn deine App in xCode geschlossen ist. Hoffe das gibt dir einige Antworten. Solange Sie Updates in Ihrer Konsole erhalten, geht es Ihnen gut. Wenn Sie den Effekt des Simulators sehen möchten, sollten Sie Ihren Standort auf der Karte darstellen und simulieren. – Wouter125