【问题标题】:location constantly updating problems iOS Swift位置不断更新问题 iOS Swift
【发布时间】:2015-08-03 14:43:56
【问题描述】:

我正在获取用户的当前位置并将其作为 println() 删除。这个想法是我要点击一个按钮来获取新位置,但是目前该应用程序不断更新(每秒)。我曾尝试在我的 IBAction 中移动 getLocation() 函数,但这会使事情崩溃。我已经更新了 info.plist,所以这不是问题。下面是代码:

    import UIKit
import CoreLocation


class ViewController: UIViewController, CLLocationManagerDelegate{

    @IBOutlet var latitude : UILabel!
    @IBOutlet var longitude : UILabel!

    var locationManager = CLLocationManager()
    var startLocation: CLLocation!


    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func findMyLocation(sender: AnyObject){
        startLocation = nil
        locationManager.startUpdatingLocation()

    }

    func getLocation(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){

        var userLocation:AnyObject = locations[0] as! CLLocation

        var strlat = String(format: "%.4f", userLocation.coordinate.latitude)
        var strlong = String(format: "%.4f",userLocation.coordinate.longitude)

        latitude.text = String(format: "%.4f", userLocation.coordinate.latitude)
        longitude.text = String(format: "%.4f",userLocation.coordinate.longitude)

        println("latitude: " + strlat)
        println("longitide: " + strlong)

        if startLocation == nil {
            startLocation = userLocation as! CLLocation
            locationManager.stopUpdatingLocation()
        }



    }

    func locationManager(manager: CLLocationManager!,
        didFailWithError error: NSError!) {

    }
}

【问题讨论】:

  • 你可以调用你的locationManager stopUpdatingLocation方法来停止位置更新。所以,一旦你得到位置,你就可以停止更新位置。
  • @GeneratorOfOne 好点!但是我将如何在 findMyLocation 函数中实现它?我仍然希望在我搬家后让该功能获得新位置...
  • 您是在寻找startMonitoringSignificantLocationChanges 吗?
  • @Larme 不,而只是想要按下按钮时当前位置的快照位置

标签: ios swift location


【解决方案1】:

locationManager.startUpdatingLocation() 移动到您的findMyLocation 函数中。这将在您按下按钮时启动 locationManager 并开始在您的 if startLocation == nil 中调用 didUpdateLocations 添加 locationManager.stopUpdatingLocation() 这将在您设置 startLocation var 后停止 locationManager。每次用户按下按钮时,该过程都会再次运行。

另外请注意,您应该在didUpdateLocations 中添加更多代码,以在使用该位置之前检查该位置的准确性和时间戳,因为它可能不是您尝试执行的有效/准确位置。

更新:

有机会进行验证,代码将适用于建议的更改。这是您的最终代码的样子。我还假设您已为位置服务设置 plist 条目,并且您的模拟器已设置为模拟位置。

import UIKit
import CoreLocation


class ViewController: UIViewController, CLLocationManagerDelegate{

    @IBOutlet var latitude : UILabel!
    @IBOutlet var longitude : UILabel!

    var locationManager : CLLocationManager! = CLLocationManager()
    var startLocation: CLLocation!


    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func findMyLocation(sender: AnyObject){
        startLocation = nil
        locationManager.startUpdatingLocation()

    }

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){

        var userLocation:AnyObject = locations[0] as! CLLocation

        var strlat = String(format: "%.4f", userLocation.coordinate.latitude)
        var strlong = String(format: "%.4f",userLocation.coordinate.longitude)

        latitude.text = String(format: "%.4f", userLocation.coordinate.latitude)
        longitude.text = String(format: "%.4f",userLocation.coordinate.longitude)

        println("latitude: " + strlat)
        println("longitide: " + strlong)

        if startLocation == nil {
            startLocation = userLocation as! CLLocation
            locationManager.stopUpdatingLocation()
        }



    }

    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {

        println("error with location manager: " + error.description)

    }


}

【讨论】:

  • 抱歉,这根本不起作用 - 应用程序甚至不再执行 getLocation 函数。我不确定从您建议的位置到达 startUpdatingLocation。
  • 您能否更新您的问题以显示您所做的更改?这是非常标准的东西,所以我不确定什么不起作用。也尝试只在 viewDidLoad 中声明一次 locationManager。
  • 当然。我刚刚更新了上面的代码。它构建得很好,但是当我按下 findMyLocation 按钮时没有任何反应。
  • 位置更新不需要自定义函数
  • 我知道我不需要它——但我想要它。这就是问题所在。我想按下按钮并在我的 IBOutlets 中更新坐标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多