didEnterRegion和didExitRegion不能在iOS8中运行

时间:2015-02-10 12:08:45

标签: swift ios8 location

我使用Core Location跟踪某个区域,以便检测用户是否输入o退出该区域。

不幸的是,我的代码适用于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) 
}

该区域开始在委托方法didStartMonitoringForRegion中跟踪:

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()

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:4)

通过设置" NSLocationAlwaysUsageDescription "我已经能够实现这一目标。在我的.plist文件中。

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

答案 1 :(得分:1)

不要忘记激活notify-properties:

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