标签文本上未显示 2 个 CLLocation 点之间的距离值

Posted

技术标签:

【中文标题】标签文本上未显示 2 个 CLLocation 点之间的距离值【英文标题】:Value of distance between 2 CLLocation points does not appear on label text 【发布时间】:2015-10-31 14:19:56 【问题描述】:

我正在尝试计算从我所在的起始位置(当我第一次启动应用程序时)到当前位置的距离,并将其显示在标签上(meters.text),但上面没有显示任何内容。 这是我的代码:

import UIKit
import CoreLocation

class CorrectViewController: UIViewController,CLLocationManagerDelegate 

@IBOutlet weak var meters: UILabel!
    var wr: Int = 0
    var distance = CLLocationDistance()
    let locationManager = CLLocationManager()


    override func viewDidLoad() 
    super.viewDidLoad()

    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.requestWhenInUseAuthorization() //starts when i use the app
    self.locationManager.distanceFilter = kCLHeadingFilterNone
    self.locationManager.startUpdatingLocation()
        

        //locatioManager delegate method
        func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) 
            let currentLocation: CLLocation = newLocation
            let startLocation: CLLocation = oldLocation
            distance = startLocation.distanceFromLocation(currentLocation)
            let tripString = NSString(format: "%.2f", distance)
            meters.text = ("\(tripString)")
  


func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
    meters.text = ("error!")


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

感谢任何帮助:)

【问题讨论】:

你在模拟器上测试这个吗? 您确定 meters 插座已连接到您的故事板或 xib 文件中吗? 我正在 iPad 上测试它,是的,我的故事板中连接了仪表标签插座。 这不是你eat an elephant的方式。仅从标题,我就可以看出您几乎没有花费任何精力来缩小问题范围。您可以在标签中显示的唯一内容是字符串。当您使用 Core Location 计算任何类型的距离时,Core Location 提供给您的唯一信息是 CLDistance。中间也有一些步骤。所以与其写一堆代码,看到不行,然后求助,不如试着像程序员一样解决问题? nhgrif,当然我知道我只能在标签中显示一个字符串,并且我确实将值转换为字符串,但它与此无关..问题是由于某种原因根本没有调用委托方法,因此我没有收到任何值,我什至没有收到使用位置服务权限的消息。无论如何,即使您是正确且经验丰富的程序员,您也尽量不要粗鲁。如您所见,我花了几天的时间尝试找到解决方案。无论如何,谢谢您.. 【参考方案1】:

位置更新委托方法似乎在viewDidLoad 函数内,因此定义了一个本地函数而不是实现委托方法。

将以下方法移出viewDidLoad 范围:

locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) 

此外,您没有请求使用用户位置的权限。确保这样做并将必要的字符串添加到您的信息列表中。

另外:oldLocation 将始终是上一个位置(不是您的初始位置)。

【讨论】:

FelixLam,你说得对,我错误地在 viewDidLoad 中有委托方法,但它仍然没有解决问题..:(【参考方案2】:

好的,经过大量搜索和“反复试验”,我找到了解决方案here。 应该使用 didUpdateLocations 方法,而不是使用方法 didUpdateToLocation。此外,将 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription 键放在 .plist 文件中非常重要(值可能是将在位置警报中显示的附加消息)。这些键在 ios 8 中是必需的。

【讨论】:

以上是关于标签文本上未显示 2 个 CLLocation 点之间的距离值的主要内容,如果未能解决你的问题,请参考以下文章

Ionic for iOS 上未显示 HTML 选择“完成”标签

gd 库创建的图像上未显示文本

iPhone 上未正确显示预格式化文本

swift中文本字段alertView上未打开的数字和其他键盘

从浮点 lat long 创建的 CLLocation 显示更高的精度

Xcode,UITableView 上未显示按钮(基本级别)