我试图用坐标数组中显示用户当前位置到位置的距离的行填充一个表。我在一个空数组中有坐标,还有用户的位置。
我坚持把坐标数组放进一个函数来计算距离,然后把每个距离值放进表行的标签中。任何见解都非常感谢。
var locationArray: [CLLocationCoordinate2D] = []
var shopperLocation = String()
var distanceText: [String] = []
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation:CLLocation = locations[0]
shopperLocation = userLocation
self.manager.stopUpdatingLocation()
}
//This is the function I am trying to use to get distance from the array of coordinates //
func distanceToLocation(){
if locationArray == nil {
locationArray = userLocation
}
let distanceBetween: CLLocationDistance = shopperLocation.distanceFromLocation(startLocation) / 1609.34
let distanceInMilesFromUser = String(format: "%.2f", distanceBetween)
distanceText = "\(distanceInMilesFromUser) mi"
}
// Here I am trying to get the distance values in the correct rows //
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! listViewCell
cell.myDistance.text = distanceText[indexPath.row]
return cell
}
2条答案
按热度按时间lokaqttq1#
这是因为您必须显式地告诉表视图重新加载数据,也就是再次请求它的
TableViewDataSource
用新数据配置每个单元格。你可以通过在
CLLocationManager
的委托方法中调用tableView.reloadData()
来实现。下面的代码是实现这一点的一种方法。顺便说一下,有几点注意事项:var myArray = [Type]()
初始化数组比提供显式类型然后分配空数组更优雅MKDistanceFormatter
可以得到一个很好的人类可读的文本输出,为您的距离-这是非常强大的,将适应您的用户的区域设置和首选单位系统免费!请不要忘记导入所有必需的模块:
定义常量:
和结构体:
然后是视图控制器:
jqjz2hbq2#
这似乎有点粗糙的权利,所以我会尽量只是给予一个大纲的基础上,它似乎是你试图做什么和你似乎有问题。
首先,您有一个locationArray,但它是空的,我假设您将以某种方式填充它。
您还拥有一个distanceText数组,因此下面是您可以使用的一种建议方法。(所有这些都没有经过测试或验证,因此请将其视为伪代码)。
当您的位置更新时
1.获取上一个位置(最近的)
1.将当前位置数组Map到一个新的distanceText数组。
1.要求tableView重新加载它的数据。