2017-06-08 1 views
0

J'ai une cellule tableview avec un uilabel à l'intérieur de celui-ci et son obtention de la distance entre deux points (l'emplacement actuel des utilisateurs et un autre point que je choisis). Le problème est que lorsque je change le point dans ma base de données et que je recharge la tableview, les miles de chaque cellule sont mis à jour. Mais quand je change ma position actuelle dans le simulateur et recharge la tableview, les milles loin ne mettent pas à jour. Voici mon code.Miles Absent ne pas mettre à jour sur recharger

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" 
     } 
    } 
} 
+0

Vous devez fermer et redémarrer le simulateur lorsque vous mettre à jour votre emplacement, avez-vous essayé cela? –

+0

@RashwanL D'abord quand je fais cela, il revient à l'emplacement par défaut et la seconde est que sur un simulateur iPhone, il mettra à jour si un emplacement des utilisateurs change quand ils rechargent la tableview ou un utilisateur doit redémarrer l'application –

+0

l'appareil fonctionnera immédiatement lorsque vous changez de position, mais pas le simulateur. –

Répondre

0

Vous devez définir votre CLLocationManager dans votre viewController puis dans le didUpdateLocations vous avez besoin de recharger votre 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" 
     } 
    } 
} 

J'espère que cette aide