Получить текущее местоположение из приложения OSX / Какао, используя Xcode Swift 3 - PullRequest
0 голосов
/ 15 октября 2018

Я прошу прощения за то, что не предоставил ему код.Причина, по которой я разместил ее с изображениями, заключается в том, что xcode - это LLVM (низкоуровневая виртуальная машина) компилятор, в котором в основном среда пользовательского интерфейса , особенно для конфигурации .Например, создание выхода или действия для объекта путем перетаскивания их в контроллер представления вместо непосредственного определения его с помощью кода.Таким образом, так как это было так, я думаю, что люди легко заметят мою ошибку быстрее.

import Cocoa
import MapKit

class ViewController: NSViewController, CLLocationManagerDelegate {

   @IBOutlet var mapView: MKMapView!
   var locManager = CLLocationManager()
   var currentLocation = CLLocation()

   var locationManager = CLLocationManager()
   var didFindMyLocation = false
   var strForCurLatitude = "";
   var strForCurLongitude = "";

   override func viewDidLoad() {
       super.viewDidLoad()

       let distancespan:CLLocationDegrees = 2000
       let busCScampuslocation:CLLocationCoordinate2D =  CLLocationCoordinate2DMake(currentLocation.coordinate.latitude, currentLocation.coordinate.longitude)
       mapView.setRegion(MKCoordinateRegion.init(center: bsuCScampuslocation, latitudinalMeters: distancespan, longitudinalMeters: distancespan), animated: true)
       print(currentLocation.coordinate.latitude)
   }
   ...
}

Ответы [ 2 ]

0 голосов
/ 03 августа 2019

Swift 5:

ViewController.swift

import Cocoa
import CoreLocation
import MapKit

class ViewController: NSViewController, CLLocationManagerDelegate {

       let manager = CLLocationManager()

       override func viewDidLoad() {
           super.viewDidLoad()
           manager.delegate = self
           manager.startUpdatingLocation()
       }

       func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            print(locations)
            //This is where you can update the MapView when the computer is moved (locations.last!.coordinate)
       }

       func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
            print(error)
       }

       func locationManager(_ manager: CLLocationManager,
                     didChangeAuthorization status: CLAuthorizationStatus) {
           print("location manager auth status changed to: " )
           switch status {
               case .restricted:
                    print("restricted")
               case .denied:
                    print("denied")
               case .authorized:
                    print("authorized")
               case .notDetermined:
                    print("not yet determined")
               default:
                    print("Unknown")
       }

}

Добавьте эти строки в Info.plist или задайте для NSLocationAlwaysAndWhenInUseUsageDescription и / (или?) NSLocationUsageDescription текстовое описаниепочему вам нужен доступ к местоположению пользователя

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
        <string>Allows us to locate you</string>
    <key>NSLocationUsageDescription</key>
        <string>Allows us to locate you</string>

Если у пользователя отключены службы определения местоположения, статус авторизации будет отклонен

0 голосов
/ 16 октября 2018

Я показываю демоверсию ios, надеюсь помочь вам. Сначала используйте делегат и определите CLLocationManager

CLLocationManagerDelegate
var locManager:CLLocationManager?;

, затем сделайте это:

    self.locManager = CLLocationManager();//[[CLLocationManager alloc] init];
    self.locManager!.delegate = self;
    self.locManager!.desiredAccuracy = kCLLocationAccuracyBest;
    self.locManager!.distanceFilter = 5.0;
    //ios8 later have effect
    self.locManager?.requestWhenInUseAuthorization();// front use
    self.locManager?.startUpdatingLocation();

последний, можете получить данные:

func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
    println("latitude %g",newLocation.coordinate.latitude);
    println("longitude %g",newLocation.coordinate.longitude);
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {

    println("locationManager error");

}

последнее, но не менее важное, в info.plist следует добавить это:

NSLocationWhenInUseUsageDescription,set YES

надеюсь помочь вам.

...