2016-03-27 11 views
8

में मेरा स्थान नहीं मिलता और दिखाता है मैं एक्सकोड v7.2.1, सिम्युलेटर v9.2 का उपयोग कर रहा हूं।मेरा सरल नक्शा प्रोजेक्ट सिम्युलेटर

:

import UIKit 
import MapKit 

class LocationVC: UIViewController, MKMapViewDelegate { 
    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     map.delegate = self 
    } 

    override func viewDidAppear(animated: Bool) { 
     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      map.showsUserLocation = true 
     } else { 
      locationManager.requestWhenInUseAuthorization() 
     } 
    } 

} 

मैं जैसा कि नीचे दिखाया में NSLocationWhenInUseUsageDescription Info.plist जोड़ लिया है:

मैं एक UIViewController जो दिखाता है एक नक्शा & & नक्शे पर यह दिखाने के लिए मेरे स्थान प्राप्त करने के लिए माना जाता है है

enter image description here

मैंने डीबग -> स्थान -> कस्टम स्थान ... भी चुना है और देशांतरसेट किया है हेलसिंकी, फिनलैंड कीअक्षांश के रूप में नीचे दिखाया गया है: enter image description here

मेरे एप्लिकेशन चलाने के लिए, नक्शा दिखाया गया है, लेकिन यह मेरे स्थान नहीं मिलता है। क्यूं कर? (मेरा मतलब है कि मुझे मानचित्र के कहीं भी नीले बिंदु नहीं दिखते हैं)।

===== अद्यतन ====

मैं भी की कोशिश की जब मेरे एप्लिकेशन चल रहा है, लेकिन यह या तो मदद नहीं करता है।

+0

आप स्थापित करना चाहिए जोड़ने के लिए 'showsUserLocation = TRUE' वैसे भी, हालत – Azat

+0

द्वारा नहीं मैं पहले उपयोगकर्ता की अनुमति पूछना चाहता हूँ तो स्थान को दिखाते हैं। वैसे भी, मेरे सशर्त कोड के साथ कुछ भी गलत नहीं है। –

+0

निम्न स्थितियों पर विचार करें: उपयोगकर्ता नियंत्रक खोलता है, स्थान का उपयोग करने के लिए सहमत होता है, आप 'requestWhenInUseAuthorization() 'निष्पादित करते हैं लेकिन उसके बाद कुछ भी नहीं होता है, मानचित्र पर स्थान दिखाने के लिए कोई और कोड नहीं है, इसलिए उपयोगकर्ता इसे अगली बार खोलने पर नीली बिंदु देखेंगे नियंत्रक – Azat

उत्तर

7

आप उपयोगकर्ता के स्थान का अनुरोध कर रहे हैं, लेकिन वास्तव में प्रतिक्रिया के साथ कुछ भी नहीं कर रहे हैं। स्थान प्रबंधक का प्रतिनिधि बनें और प्राधिकरण परिवर्तन का जवाब दें।

इस कोड 7.2.1 पर मेरे लिए काम करता (डीबग में "एप्पल" चयन करने के बाद -> स्थान):

import UIKit 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate { 
    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     locationManager.delegate = self 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      map.showsUserLocation = true 
     } else { 
      locationManager.requestWhenInUseAuthorization() 
     } 
    } 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     guard status == .AuthorizedWhenInUse else { print("not enabled"); return } 
     map.showsUserLocation = true 
    } 
} 
0

मैं @Casey के जवाब से सहमत हैं, लेकिन कभी कभी आप एक छोटे से करने की जरूरत है CLLocationManagerDelegate विधि के साथ और अधिक।

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if let location = locations.first { 
     //reset mapView's center in case your custom location was wrong. 
     map.centerCoordinate = location.coordinate 
     //mannual call show annotations to avoid some bugs 
     map.showAnnotations(map.annotations, animated: true) 
    } 
} 
0

तुम सिर्फ

locationManager.delegate = self 
mapView.showsUserLocation = true 
संबंधित मुद्दे