ios - swift locationManager 清除区域缓存

标签 ios swift

我有一个应用程序,可以对 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/

相关文章:

ios - iOS 8 上的自动布局约束

c++ - 在 Swift 代码中调用 C++ 函数时读取文件失败

ios - 在 Xcode 中使用 Swift 确定在 webView 中完成加载网站

ios - 如何检查 iOS 设置是否允许权限

ios - 在函数外使用来自 Alamofire 请求的值

ios - 你如何在 View 中调用位于 viewController 中的方法?

iphone - 检测 UIWebView 是否需要使用 HTTP 或 HTTPS

ios - 带有图像和文本的自定义按钮

ios - 电话不工作后恢复 AVAudioPlayer

swift - LinkedIn 共享数据 URL 无成功或错误的回调响应