didEnterRegion 和 didExitRegion 在 iOS8 中不起作用

didEnterRegion and didExitRegion don't work in iOS8

我正在使用 Core Location 来跟踪区域,以检测用户是否进入或退出该区域。

不幸的是,我的代码在 iOS7 中有效,但在 iOS8 中无效。

这是我正在使用的代码:

func setMonitoredRegion() {
var startLocation: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: +52.53753000, longitude: +13.35971000)        
    var monitoredRegion = CLCircularRegion(center: startLocation, radius: 100, identifier: "Region Test")
    locationManager.startMonitoringForRegion(monitoredRegion) 
}

在delegate方法didStartMonitoringForRegion中开始跟踪region:

func locationManager(manager: CLLocationManager!, didStartMonitoringForRegion region: CLRegion!) {
    println("Starting monitoring \(region.identifier)")
}

但是在iOS8中没有调用方法 didEnterRegion 和 didExitRegion:

func locationManager(manager: CLLocationManager!, didEnterRegion region: CLRegion!) {
    println("Entered Region \(region.identifier)")
    self.showAlertViewWithTitle("Enter Region", message: "The user has entered in monitored region").show()
}

func locationManager(manager: CLLocationManager!, didExitRegion region: CLRegion!) {
    println("Exited Region \(region.identifier)")
    self.showAlertViewWithTitle("Exit Region", message: "The user has left monitored region").show()
}

此外,我在以下方面没有收到任何错误:

func locationManager(manager: CLLocationManager!, monitoringDidFailForRegion region: CLRegion!, withError error: NSError!) {
    println("Error:" + error.localizedDescription)
}

或者:

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    println("Error:" + error.localizedDescription)
}

在 iOS8 中,我将以下密钥包含在 info.plist 文件中:

NSLocationWhenInUseUsageDescription

并且在代码中我获得了用户授权:

locationManager.requestWhenInUseAuthorization()

有什么想法吗?谢谢。

不要忘记激活通知属性:

self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;

我已经能够通过在我的 .plist 文件中设置“NSLocationAlwaysUsageDescription”来实现它。

我不确定当应用程序不是 运行 时这是否会增加电池使用量,但这允许我在进入和退出时收到通知...