Miles Away 没有在重新加载时更新

Posted

技术标签:

【中文标题】Miles Away 没有在重新加载时更新【英文标题】:Miles Away not updating on reload 【发布时间】:2017-06-08 17:01:24 【问题描述】:

我有一个表格视图单元格,里面有一个 uilabel,它获取两点之间的距离(用户当前位置和我选择的另一个点)。问题是,当我更改数据库中的点并重新加载 tableview 时,每个单元格中的英里数都会更新。但是,当我在模拟器中更改当前位置并重新加载 tableview 时,里程数不会更新。这是我的代码。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath, object: PFObject?) -> PFTableViewCell? 
let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath as IndexPath) as! MyCell
cell.object = object
let currentLocation = CLLocation()
locManager.distanceFilter = 50
if( CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse ||
    CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways)
    let coordinate₀ = CLLocation(latitude: CLLocationDegrees(-41)!, longitude: CLLocationDegrees(52.3)!)
    let coordinate₁ = CLLocation(latitude: currentLocation.coordinate.longitude, longitude: currentLocation.coordinate.latitude)
    let distanceInMeters = coordinate₀.distance(from: coordinate₁)
    if(distanceInMeters <= 1609)
    
        cell.Distance.text = "\(Float(round(distanceInMeters * 3.28084)).cleanValue) ft"
    
    else
    
        cell.Distance.text = "\(Float(round(distanceInMeters / 1609)).cleanValue) mi"
      
   

【问题讨论】:

更新位置时需要关闭并重启模拟器,你试过了吗? @RashwanL 首先,当我这样做时,它会设置回默认位置,其次是在 iPhone 模拟器上,如果用户在重新加载 tableview 时位置发生变化或用户是否必须更改,它会更新重启应用 没有真机在你改变位置时会立即工作,模拟器不会。 在模拟器中将位置设置为移动设备,例如“高速公路”。这样,您无需重新启动模拟器即可更新位置。 【参考方案1】:

您需要在viewController 中定义您的CLLocationManager,然后在didUpdateLocations 中您需要重新加载您的tableView

import UIKit
import CoreLocation

class MyViewController: UIViewController, CLLocationManagerDelegate 

    @IBOutlet weak var LabelTest: UILabel!
    var manager = CLLocationManager()
    @IBOutlet weak var tableView: UITableView!

    //your default position
    var userLoc = CLLocation(latitude: 42.6977,longitude: 23.3219)
        
        didSet
            self.tableView.reloadData()
        
    
    //**Your class implementation**/

    override func viewDidLoad() 
        super.viewDidLoad()

        //**Your implementation*//

        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()
    

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
        let userlocation: CLLocation = locations[0] as CLLocation
        self.userLoc = userlocation
    


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath, object: PFObject?) -> PFTableViewCell? 
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath as IndexPath) as! MyCell
        cell.object = object
        let currentLocation = self.userLoc

        let coordinate₀ = CLLocation(latitude: CLLocationDegrees(-41), longitude: CLLocationDegrees(52.3))
        let coordinate₁ = CLLocation(latitude: currentLocation.coordinate.longitude, longitude: currentLocation.coordinate.latitude)
        let distanceInMeters = coordinate₀.distance(from: coordinate₁)
        if(distanceInMeters <= 1609)
        
            cell.Distance.text = "\(Float(round(distanceInMeters * 3.28084)).cleanValue) ft"
        
        else
        
            cell.Distance.text = "\(Float(round(distanceInMeters / 1609)).cleanValue) mi"
        
    

希望对你有帮助

【讨论】:

以上是关于Miles Away 没有在重新加载时更新的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 没有重新加载

如何在不重新加载窗口的情况下单击按钮时在 JSP 中进行更新查询?

当我动态更改其框架时,即使重新加载后 UITableView 内容大小也不会更新

如何在IOS中重新加载UIBarButtonItem

vscode没有在vue文件中重新加载打字稿

ztree重新加载无效