2017-10-07 18 views
0

なぜこのコードは機能しませんか?私はそれが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で許可を設定するには

+0

私はまったく同じ問題を抱えています。デバッグ後、私はdidUpdateLocationsが何らかの理由で呼び出していないと考えています。 –

+0

「動作していません」と定義します。それは無駄な説明です。 [編集]あなたの質問はあなたのコードがあなたが期待していることをしていない方法で明確に説明する。あなたはコンパイラのエラーや警告を受け取っていますか?アプリがクラッシュしていますか?エラーメッセージはありますか?コードは期待どおりに実行されませんか?そうです、どのようにですか?あなたの問題を明確かつ具体的にする。 – rmaddy

+0

実際のデバイスでコードを実行してみます。または、シミュレータ位置のデバッグ機能を使用します。 – Aks

答えて

0

またあなたに要求され、新しいキーNSLocationAlwaysAndWhenInUsageDescriptionがありますinfo.plist

<key>NSLocationAlwaysUsageDescription</key> 
    <string> location permission text.</string> 
<key>NSLocationWhenInUseUsageDescription</key> 
    <string> location permission text.</string> 
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> 
    <string> location permission text.</string> 

ドキュメントhere

中を見てみましょう

あなたはNSLocationWhenInUseUsageDescription 、アプリの Info.plistファイル内NSLocationAlwaysAndWhenInUsageDescriptionキーを含める必要があります。 (あなたのアプリがiOS 10以前のバージョンをサポートしている場合は、 キーが存在しないと、即座に認証リクエストが失敗します。 NSLocationAlwaysUsageDescriptionキーが必要です。

ここで1つのプロンプトが表示されます。 enter image description here

関連する問題