我们正处于开发Swift2.2应用程序的高级阶段,因此决定在此期间迁移到2.3并稍后进行完整的Swift 3迁移.但是我们无法在转换到Swift 2.3后获得信标检测工作.方法“didRangeBeacons”不断返回一个空数组.相同的代码在Swift 2.2中工作,因此我们知道我们拥有所有权限等.
此外,如果我们在同一个ipad上打开“定位”应用程序,那么我们的应用程序也会开始在“didRangeBeacons”中返回数据.尝试了各种版本的应用程序,所有Swift2.3应用程序的行为方式都相同.无法弄清楚Locate应用程序正在做什么…在同一条船上的任何人?
这是我们正在使用的代码.我不确定这应该写在这里或评论中,但不能以某种方式将代码放在评论中……
- import UIKit
- import CoreLocation
- class ViewController: UIViewController,CLLocationManagerDelegate {
- let locationManager = CLLocationManager()
- let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "9735BF2A-0BD1-4877-9A4E-103127349E1D")!,identifier: "testing")
- // Note: make sure you replace the keys here with your own beacons' Minor Values
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view,typically from a nib.
- self.locationManager.delegate = self
- self.locationManager.requestAlwaysAuthorization()
- self.locationManager.startMonitoringForRegion(self.region)
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- func locationManager(manager: CLLocationManager,didStartMonitoringForRegion region: CLRegion) {
- print("didStartMonitoringForRegion")
- self.locationManager.requestStateForRegion(region)
- }
- func locationManager(manager: CLLocationManager,monitoringDidFailForRegion region: CLRegion?,withError error: NSError) {
- print("monitoringDidFailForRegion")
- }
- func locationManager(manager: CLLocationManager,didDetermineState state: CLRegionState,forRegion region: CLRegion) {
- print("didDetermineState")
- if state == .Inside {
- //Start Ranging
- self.locationManager.startRangingBeaconsInRegion(self.region)
- self.locationManager.startUpdatingLocation()
- }
- else {
- //Stop Ranging here
- self.locationManager.stopUpdatingLocation()
- self.locationManager.stopRangingBeaconsInRegion(self.region)
- }
- }
- func locationManager(manager: CLLocationManager,didRangeBeacons beacons: [CLBeacon],inRegion region: CLBeaconRegion) {
- print(beacons.count)
- }
}
[更新发布更多尝试以使其工作]
如果我们删除self.locationManager.startMonitoringForRegion(self.region),应用程序在前台模式下工作
并调用self.locationManager.startRangingBeaconsInRegion(self.region)
self.locationManager.requestAlwaysAuthorization()之后直接
这是次优的,因为我们没有进入和退出事件或状态,但至少我们得到了信标计数.
@H_301_16@