なぜこのコードは機能しませんか?私はそれがdidUpdateLocations過大評価されたメソッドと何かだと思いますか?私のInfo.plistの に場所を常に使用方法の説明をし、私はあまりにも私のシミュレータ上の設定で場所を許さ:私が正しく自分のラベルでそれらを接続し、それらをライブすることができますどのように:)Swift 4 CoreLocationが動作しない
import UIKit
import CoreLocation
class MainVC: UIViewController, CLLocationManagerDelegate {
var walking = false
var pause = false
var locationManager: CLLocationManager = CLLocationManager()
var startLocation: CLLocation!
var speed: CLLocationSpeed = CLLocationSpeed()
@IBOutlet weak var latitudeLabel: UILabel!
@IBOutlet weak var longitudeLabel: UILabel!
@IBOutlet weak var horizontalAccuracyLabel: UILabel!
@IBOutlet weak var verticalAccuracyLabel: UILabel!
@IBOutlet weak var distanceLabel: UILabel!
@IBOutlet weak var altitudeLabel: UILabel!
@IBOutlet weak var speedLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
locationManager.startUpdatingHeading()
startLocation = nil
// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization()
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func startDistance(_ sender: UIButton) {
startLocation = nil
walking = true
}
@IBAction func stopDistance(_ sender: UIButton) {
walking = false
}
@IBAction func resetDistance(_ sender: UIButton) {
startLocation = nil
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let latestLocation: AnyObject = locations[locations.count - 1]
latitudeLabel.text = String(format: "%.4f",latestLocation.coordinate.latitude)
longitudeLabel.text = String(format: "%.4f",latestLocation.coordinate.longitude)
horizontalAccuracyLabel.text = String(format: "%.4f",latestLocation.horizontalAccuracy)
verticalAccuracyLabel.text = String(format: "%.4f",latestLocation.verticalAccuracy)
altitudeLabel.text = String(format: "%.4f",latestLocation.altitude)
if walking == true {
if startLocation == nil {
startLocation = latestLocation as! CLLocation
speed = locationManager.location!.speed
speedLabel.text = String(format: "%.0f km/h", speed * 3.6)
}
let distanceBetween: CLLocationDistance =
latestLocation.distance(from: startLocation)
distanceLabel.text = String(format: "%.2f", distanceBetween)
}
}
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
{
// capLabel.text = String(format: "%.4f",newHeading.magneticHeading)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
}
}
私も追加しました。
ありがとうございます。次の操作を行い、私はあなたのコードself.locationManager.requestAlwaysAuthorization()
に書かれている見ることができる場所のサービスのために常にスウィフト4で許可を設定するには
私はまったく同じ問題を抱えています。デバッグ後、私はdidUpdateLocationsが何らかの理由で呼び出していないと考えています。 –
「動作していません」と定義します。それは無駄な説明です。 [編集]あなたの質問はあなたのコードがあなたが期待していることをしていない方法で明確に説明する。あなたはコンパイラのエラーや警告を受け取っていますか?アプリがクラッシュしていますか?エラーメッセージはありますか?コードは期待どおりに実行されませんか?そうです、どのようにですか?あなたの問題を明確かつ具体的にする。 – rmaddy
実際のデバイスでコードを実行してみます。または、シミュレータ位置のデバッグ機能を使用します。 – Aks