質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.64%

Use of unresolved identifier 'locationManager'とエラーが発生する。

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,283

Cassini

score 9

 前提・実現したいこと

Swift初学者です。
Swiftを使って、位置情報からピンを立てて線を引くことで軌跡アプリを作りたいと思っています。
PAUSEボタンを押すと、manager.stopUpdatingLocation()が働いて、位置情報を得ることを止めようとしたところエラーが発生しました。
Swiftを学び始めたばかりで初歩的な質問かもしれませんが教えていただきたいです。

 発生している問題・エラーメッセージ

エラーメッセージ Use of unresolved identifier 'locationManager'

 該当のソースコード

ソースコード   guard let manager = locationManager else { return }  //エラー
          manager.stopUpdatingLocation()
          manager.delegate = nil
          

 試したこと

紐づけがされているかを確認しました。

追記 
locationManager=nilを削除しました。
return managerを追加しました。

 補足情報(FW/ツールのバージョンなど)

Swift 3.0.2
Xcode 8.2.1

コード全容を記述します。

import UIKit
import MapKit

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    @IBOutlet weak var testMapView: MKMapView!
    @IBOutlet weak var START: UIButton!
    @IBOutlet weak var PAUSE: UIButton!

    @IBAction func startbtntapped(_ sender: UIButton) {

        // Startボタンを無効化
        START.isEnabled = false
        // PAUSEボタンを有効化
        PAUSE.isEnabled = true

        var testManager:CLLocationManager = CLLocationManager()

        //アノテーション
        var annotation:MKPointAnnotation!



        //最初からあるメソッド
        func viewDidLoad() {
            super.viewDidLoad()



            //デリゲート先に自分を設定する。
            testManager.delegate = self

            //位置情報の取得を開始する。
            testManager.startUpdatingLocation()

            //位置情報の利用許可を変更する画面をポップアップ表示する。
            testManager.requestWhenInUseAuthorization()

            print("testMapView:", testMapView)
            //デリゲート先を自分に設定する。
            testMapView.delegate = self

        }



        //位置情報取得時の呼び出しメソッド
        func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

            for location in locations {

                //中心座標
                let center = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)

                //表示範囲
                let span = MKCoordinateSpanMake(0.01, 0.01)

                //中心座標と表示範囲をマップに登録する。
                let region = MKCoordinateRegionMake(center, span)
                testMapView.setRegion(region, animated:true)

                if(annotation == nil) {
                    //初回はマップにピンを格納する。
                    annotation = MKPointAnnotation()
                    annotation.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
                    testMapView.addAnnotation(annotation)
                } else {
                    //2回目以降は移動前と後の座標間に直線を引く。

                    //始点と終点の座標
                    var lineLocation:[CLLocationCoordinate2D] = [CLLocationCoordinate2D(latitude: annotation.coordinate.latitude, longitude: annotation.coordinate.longitude),
                                                                 CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)]

                    //2点間に直線を描画する。
                    let line = MKPolyline(coordinates: &lineLocation, count: 2)
                    testMapView.add(line)

                    //ピンの位置を更新する。
                    annotation.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
                }
            }
        }



        //描画メソッド実行時の呼び出しメソッド
        func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
            let testRender = MKPolylineRenderer(overlay: overlay)

            //直線の幅を設定する。
            testRender.lineWidth = 3

            //直線の色を設定する。
            testRender.strokeColor = UIColor.red

            return testRender

        }
    }

    @IBAction func pausebtntapped(_ sender: UIButton) {

        //Startボタンを有効化
        START.isEnabled = true
        //Pauseボタンを無効化
        PAUSE.isEnabled = false

        guard let manager = locationManager else { return } //ここでエラー
        manager.stopUpdatingLocation()
        manager.delegate = nil


        // untracking user location
        testMapView.userTrackingMode = MKUserTrackingMode.none
        testMapView.showsUserLocation = false
        testMapView.removeAnnotations(testMapView.annotations)
     
     return manager

    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

guard let manager = locationManager else { return } //ここでエラー

locationManagerに引数がありません
locationManagerに戻り値がありません

locationManager = nil

locatioinManagerはmethodなので代入できません

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/20 03:58

    kosanai様ご返信ありがとうございます。
    返信遅くなり申し訳ありません。
    すみません。引数、戻り値がない場合はどのように修正したら良いのでしょうか?

    キャンセル

  • 2018/11/20 10:08

    流石に説明が厳しいです。本やWebで基本構文を確認するのをオススメします(ただWebは分かりやすいのがあまり無いですね)

    キャンセル

  • 2018/11/20 13:18

    kosanai様ご返信ありがとうございます。
    ありがとうございました。頑張ってやってみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る