2016-05-28 14 views
0

Ich habe mit der Regionsüberwachung experimentiert, um eine Warnung oder eine lokale Benachrichtigung anzuzeigen, wenn sich der Benutzer innerhalb der festgelegten Region befindet. Als ersten Schritt habe ich eine Druckzeile hinzugefügt, um zu sehen, ob sie im Debug-Bereich funktioniert. Während die anderen Zeilen gedruckt werden, bekomme ich nichts für didEnterRegion und didExitRegion.didEnterRegion, didExitRegion wird nicht aufgerufen

Ich simuliere den Standort innerhalb/außerhalb der gegebenen Region, aber ich habe kein Glück. Es wäre großartig, wenn jemand den Code unten sehen und sehen könnte, was ich verpasst habe. Vielen Dank.

import UIKit 
    import CoreLocation 

    class ViewController: UIViewController, CLLocationManagerDelegate { 

    var manager = CLLocationManager?() 



     override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
      manager = CLLocationManager() 
      let latitude: CLLocationDegrees = 48.858400 
      let longitude: CLLocationDegrees = 2.294500 
      let center: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) 
      let radius: CLLocationDistance = CLLocationDistance(100.0) 
      let identifier: String = "Notre Dame" 

      let currRegion = CLCircularRegion(center: center, radius: radius, identifier: identifier) 

      manager?.distanceFilter = 10 
      manager?.desiredAccuracy = kCLLocationAccuracyBest 
      currRegion.notifyOnEntry = true 
      currRegion.notifyOnExit = true 

      manager?.requestWhenInUseAuthorization() 


      manager?.delegate = self 
      manager?.pausesLocationUpdatesAutomatically = true 

      manager?.startMonitoringForRegion(currRegion) 
      manager?.startUpdatingLocation()  


     } 

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

     func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) { 
      print("The monitored regions are: \(manager.monitoredRegions)") 
     } 

     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
      let locValue:CLLocationCoordinate2D = manager.location!.coordinate 
      print("locations = \(locValue.latitude) \(locValue.longitude)") 
     } 

     func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) { 
      NSLog("Entered") 
     } 

     func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) { 
      NSLog("Exited") 
     } 


    } 

Antwort

1

Sie können es, indem

Manager? .requestWhenInUseAuthorization()

zu

Manager? .requestAlwaysAuthorization()

0 Arbeit machen

dann auf Ihre Datei info.plist dieser Schlüssel NSLocationAlwaysUsageDescription mit Mehrwert „Das ist für Testzwecke“ oder was auch immer Text, den Sie wollen, dass diese, was Benutzer erscheint anfordert verwenden Standort

+0

Awesome -, die wie ein gearbeitet Charme. Danke für Ihre Hilfe! Wenn ich fragen darf, warum funktioniert RequestWhenInUseAuthorization nicht? Auch wenn die App beim Testen des Codes aktiv war? – user6394273

+0

Ich denke, dass Sie RequestAlwaysAuthorization() anfordern müssen, um Regionen Überwachung zu verwenden. Dieses Lernprogramm enthält weitere Informationen http://shrikar.com/swift-tutorial-corelocation-and-region-monitoring-in-ios-8/ –