我有一个应用程序,可以对 CLBeaconRegions 的 didEnterRegion 和 didExitRegion 执行操作。这些都在我的 View Controller 类上。现在用户应该可以自己设置UUID了。因此,我制作了第二个 View Controller (setibeaconVC)来更改 UUID 的字符串。
它确实有效,但是随着用户更改应用程序中的 UUID,区域会增加。因此,更改 UUID 后,将首先调用操作一次,一旦调用操作两次,依此类推。
在更改 UUID 之前是否有任何命令可以清除这些区域的缓存?
这是我的代码的一部分。
View Controller :
var ibeaconuuid:String! = "B9407F30-F5F8-466E-AFF9-25556B57FE6D"
let locationManager = CLLocationManager()
var beaconUUID:NSUUID!
var region:CLBeaconRegion!
override func viewDidLoad() {
super.viewDidLoad()
beaconUUID = NSUUID(UUIDString: ibeaconuuid)
region = CLBeaconRegion(proximityUUID: beaconUUID, identifier: "Beacon")
locationManager.delegate = self
locationManager.pausesLocationUpdatesAutomatically = false
region.notifyOnEntry = true
region.notifyOnExit = true
region.notifyEntryStateOnDisplay = false
if (CLLocationManager.authorizationStatus() != CLAuthorizationStatus.AuthorizedAlways) {
locationManager.requestAlwaysAuthorization()
}
if (CLLocationManager .isMonitoringAvailableForClass(CLBeaconRegion))
{
print("OK")
}
else {
print("Problem")
}
locationManager.startMonitoringForRegion(region)
locationManager.startRangingBeaconsInRegion(region)
locationManager.startUpdatingLocation()
}
这里是 setiBeaconVC:
class setibeaconVC: UIViewController {
@IBOutlet weak var ibeaconuuidtext: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let DestViewController: ViewController = segue.destinationViewController as! ViewController
DestViewController.ibeaconuuid = ibeaconuuidtext.text!
}
}
非常感谢 斯蒂芬
最佳答案
在 View Controller 中重新创建 CLBeaconRegion
之前,调用 locationManager.stopMonitoringForRegion(region)
。
您需要在调用之前检查它是否包含一个区域,因为第一次运行时不会。最简单的方法是将区域更改为可选区域,而不是强制展开可选区域。然后像这样检查:
var region:CLBeaconRegion? // Update to this.
if let r = region {
locationManager.stopMonitoringForRegion(r)
}
关于ios - swift locationManager 清除区域缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007476/