質問

今これをしっかりと働くために今すぐ働くことを試みています、そして私はここに来て、私はSwiftでcllocationManagerDelegateメソッドを使うことにどのように行くのですか?私はこれを私のクラスの上に置きました:

var locationManager = CLLocationManager()
.

私は次のことを私のviewDidLoadメソッドに入れました:

locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
.

と私はこれらの委任メソッドを使用して使用しようとしました:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {
    locationReceived = true
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    locationReceived = false
}
.

関数の前に@オプションを使ってみましたが、Xcodeはコンパイラエラーをスローします。任意のアイデア?

役に立ちましたか?

解決

まだ必須の場合は、PlistにNSLocationAlwaysUsageDescriptionまたはNSLocationWhenInUseUsageDescriptionキーを追加する必要があります。


ios8 +は、これら2つの文字列のうちの1つを使用するには、位置を使用するように設定されます。あなたが使用するのはあなたが場所を尋ねる方法によって異なります。

  • アプリが開いて使用されていない場合でも、デバイスの場所を使用したいアプリのNSLocationAlwaysUsageDescriptionを使用します。

  • アプリケーションが開いて使用中の場合にのみ、デバイスの場所を使用したいアプリのNSLocationWhenInUseUsageDescriptionを使用します。

注:ビルドして実行する前に、デバイスからアプリを削除して、新しいインストールを行います。アプリがIOS8にアップグレードする前にアプリが場所を使用することを許可されている場合、それはあなたの許可を再度求められず、それらの文字列を設定したことを確認しません。削除とクリーンインストールを行うとこれが解決されます。

どちらかの文字列の設定は、「thisApp」を「allow」の行に沿ってインストール/最初に使用するように促してください。

これは plist ファイルのスクリーンショットです。

画像の説明が入力されています

他のヒント

最初にPlistファイルの2行を追加する

1)NSloCationWheninuseUserSpressionscription

2)Nslocationalwaysusedesproction

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate

var seenError : Bool = false
var locationFixAchieved : Bool = false
var locationStatus : NSString = "Not Started"

var locationManager: CLLocationManager!

override func viewDidLoad() {
    super.viewDidLoad()
}

  func initLocationManager() {
   seenError = false
   locationFixAchieved = false
    locationManager = CLLocationManager()
   locationManager.delegate = self
   locationManager.locationServicesEnabled
   locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
}

  func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    locationManager.stopUpdatingLocation()
    if (error) {
        if (seenError == false) {
            seenError = true
           print(error)
        }
    }
}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {
    if (locationFixAchieved == false) {
        locationFixAchieved = true
        var locationArray = locations as NSArray
        var locationObj = locationArray.lastObject as CLLocation
        var coord = locationObj.coordinate

        println(coord.latitude)
        println(coord.longitude)
    }
}

 func locationManager(manager: CLLocationManager!,
    didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        var shouldIAllow = false

        switch status {
        case CLAuthorizationStatus.Restricted:
            locationStatus = "Restricted Access to location"
        case CLAuthorizationStatus.Denied:
            locationStatus = "User denied access to location"
        case CLAuthorizationStatus.NotDetermined:
            locationStatus = "Status not determined"
        default:
            locationStatus = "Allowed to location Access"
            shouldIAllow = true
        }
        NSNotificationCenter.defaultCenter().postNotificationName("LabelHasbeenUpdated", object: nil)
        if (shouldIAllow == true) {
            NSLog("Location to Allowed")
            // Start location services
            locationManager.startUpdatingLocation()
        } else {
            NSLog("Denied access: \(locationStatus)")
        }
}
.

ユーザーの現在の場所を取得する: -

ステップ1: let locationManager = CLLocationManager() // make object of CLLocationManager class.

ステップ2: In viewDidLoad instantiate the CLLocationManager class like,

//バックグラウンドで使用する

self.locationManager.requestAlwaysAuthorization()

// For use in foreground

self.locationManager.requestWhenInUseAuthorization()

if (CLLocationManager.locationServicesEnabled())
{
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
.

ステップ3: CLLocationManager

のデリゲートメソッドを実装するようになりました
  func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

    var locValue:CLLocationCoordinate2D = manager.location.coordinate

    println("locations = \(locValue.latitude) \(locValue.longitude)")

  }
.

ステップ4: IOS 8のようにinfo.plistにNSLocationAlwaysUsageDescriptionを追加することを忘れないでください。これを追加することは必須です。これはユーザーの場所を使用する許可を求めます。

私は同じ問題を持っていました。didupdateLocations - 機能していませんでした。あなたのアプリを実行してください。 [設定] - > [プライバシー] - > [場所]をオフにします。DidFailWERTRORは、ロケーションサービスが不在であることについてのエラーを捉えます。それから電源を入れます。その瞬間以来、didupdatelocationsは場所を捕まえます。

これは古いスレッドの少しですが、Swift 2.2 Xcode 7.3.1で私のために上記のどれも働いていませんでした。

問題は私が使っていたものです:

func locationManager(manager: CLLocationManager!, didUpdateLocation locations: [AnyObject]!) {
    print("Got location")
    locationManager.stopUpdatingLocation()
}
.

とこれは呼ばれなかった。私が変更したとき:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print("Got location")
    locationManager.stopUpdatingLocation()
}
.

それはすべてうまくいった。[AnyObject]

を使用しているときに代理人が呼び出されていないようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top