didEnterRegion и didExitRegion не вызывают - PullRequest
0 голосов
/ 05 июля 2018

Я разрабатываю приложение через xCode, которое использует геозону и мониторинг региона. Посредством мониторинга этих областей при входе и выходе предполагается вызвать всплывающее окно для отображения пользователю местоположения, в котором они находятся (или выходят) из указанного местоположения. Когда я использую свой файл .gpx, чтобы имитировать выход из и ввод местоположения или сам вход / выход из этого местоположения, к сожалению, функции входа и выхода никогда не вызывают.

До недавних обновлений в Xcode мой код работал отлично, и вызывались функции входа и выхода. Они не звонят сейчас и давно не были. Я провел много исследований по этому вопросу и обнаружил, что с обновлениями в XCode изменение manager.requestWhenInUseAuthorization() на manager.requestAlwaysAuthorization() и соответствующее обновление файлов plist должно устранить эту ошибку (manager = CLLocationManager). Я попробовал это и обновил свой код, но безрезультатно.

Ниже приведено изображение моих файлов P-List для запросов о местоположении пользователей.

P-List Request Files

Я разместил свой код, относящийся к этой проблеме, ниже, и я и другие были бы очень признательны за любую помощь или идеи о том, как решить эту проблему, поскольку она, похоже, повторяется в обновленном xCode. Спасибо:)

P.S. Другие функции locationManager вызывают. К ним относятся местоположения didUpdate и didStartMonitoring.

import Foundation
import UIKit
import CoreLocation
import MapKit

class ViewController: UIViewController, MKMapViewDelegate,        CLLocationManagerDelegate {

@IBOutlet weak var mapView: MKMapView!

var locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()

    locationManager = CLLocationManager()
    mapView.delegate = self
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    locationManager.startUpdatingLocation()
    mapView.showsUserLocation = true
    mapView.setUserTrackingMode(.follow, animated: true)

    let title = "Oakville Test"
    let coordinate = CLLocationCoordinate2DMake(43.477521, -79.712430)
    let regionRadius = 150.0

    // setup region
    let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: coordinate.latitude, longitude: coordinate.longitude), radius: regionRadius, identifier: title)
    region.notifyOnEntry = true
    region.notifyOnExit = true
    locationManager.startMonitoring(for: region)
    locationManager.startUpdatingLocation()

    // setup annotation
    let annotationView = MKPointAnnotation()
    annotationView.coordinate = coordinate;
    annotationView.title = "\(title)";
    mapView.addAnnotation(annotationView)

    // setup circle
    let circle = MKCircle(center: coordinate, radius: regionRadius)
    mapView.add(circle)
}

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer! {
    if overlay is MKPolyline {
        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = UIColor.blue.withAlphaComponent(0.6)
        renderer.lineWidth = 5.0
        renderer.fillColor = UIColor.blue.withAlphaComponent(0.7)
        return renderer
    } else {
        let circleRenderer = MKCircleRenderer(overlay: overlay)
        circleRenderer.strokeColor = UIColor.red.withAlphaComponent(0.4)
        circleRenderer.lineWidth = 1.0
        circleRenderer.fillColor = UIColor.red.withAlphaComponent(0.4)
        return circleRenderer
    }
    return nil
}

func showAlert(_ title: String) {
    let alert = UIAlertController(title: title, message: nil, preferredStyle: .alert)
    let noAction = UIAlertAction(title: "No", style: .default, handler: nil)
    let yesAction = UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: nil)
    alert.addAction(yesAction)
    alert.addAction(noAction)
    self.present(alert, animated: true, completion: nil)
}

func locationManager(_ manager: CLLocationManager, didStartMonitoringFor 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) {
    showAlert("You are at \(region.identifier)!")
}

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
    showAlert("leaving \(region.identifier).")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...