2015-11-10 4 views
3

Приведенный ниже код работал только один раз, и теперь внезапно он не показывает точку интереса (POI). Я попробовал это на двух разных машинах и получаю такое же поведение. Это то, что меня озадачило, это код или настройки моего симулятора.iOS Simulator не обновляет местоположение

Я очистил проект, убедившись, что у меня был симулятор по обычаю. У меня была печать долготы и широты, и внезапно она не печатается на консоли.

импорт UIKit импорт MapKit импорт CoreLocation

класс MapViewController: UIViewController, CLLocationManagerDelegate {

@IBOutlet var map: MKMapView! 

var manager:CLLocationManager! 
var latitude:Double = 0.0 
var longitude:Double = 0.0 
var location:Double = 0.0 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("init") 
    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy - kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    print("test test test") 

    let userLocation:CLLocation = locations[0] 
    self.latitude = userLocation.coordinate.latitude 
    self.longitude = userLocation.coordinate.longitude 

    let request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = "Army Recruiting" 

    request.region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 1600, 1600) 

    MKLocalSearch(request: request).startWithCompletionHandler { (response, error) in 
     guard error == nil else { return } 
     guard let response = response else { return } 
     guard response.mapItems.count > 0 else { return } 

     let randomIndex = Int(arc4random_uniform(UInt32(response.mapItems.count))) 
     let mapItem = response.mapItems[randomIndex] 

     mapItem.openInMapsWithLaunchOptions(nil) 
    } 

    print("\(self.longitude) \(self.latitude)") 

} 

-------------------- --update расположение 1 --------------------

Обновление с помощью имитатора

enter image description here

Я заметил, что ниже функция не работает:

func locationManager(manager: CLLocationManager, didUpdateLocations 
locations: [CLLocation]) 

--------------------- Update 2 ------ --------------

Приложение работало, а затем остановилось. Не уверен что происходит. Да я добавил NSLocationWhenInUseUsageDescription и NSLocationAlwaysUsageDescription enter image description here

ответ

2

Пара вопросов с кодом:

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("init") 
    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy - kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
} 

Заменить:

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("init") 
    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
    manager.startUpdatingLocation() 
} 

ДОПОЛНИТЕЛЬНО (для информации)

Вы можете создавать файлы GPX для разных местах.

Вы также можете имитировать маршруты в файлах GPX - ознакомьтесь с документацией Apple, которая показывает вам, как установить файлы GPX в вашу целевую сборку. https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/CustomizingYourExperienceThroughXcodeSchemes/CustomizingYourExperienceThroughXcodeSchemes.html

Существует также хороший учебник со ссылками на создание файлов GPX и маршрутов, которые я использовал в прошлом, и очень полезен. https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html

+0

. LocationManager func не выполняет. Я подтвердил, поставив print() в функции. Я не уверен, почему он не работает. – Drew1208

+0

Используется ли приложение для служб определения местоположения? – RichAppz

+0

Только запрос вызывает, похоже, что вы не настроили NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription (в вашем случае) в вашем файле .plist. Перейти к информации о вашей цели и добавить строку с NSLocationWhenInUseUsageDescription и String будет причиной, по которой вы хотите, чтобы использование служб местоположения для приложения – RichAppz

2

Тренажер может иметь набор жестких закодированные мест, и изменить их или отключить их в консоли Xcode.

Он должен выглядеть следующим образом:

enter image description here

Если вы хотите проверить реальное перемещение места, которые вы должны проверить его на устройстве.

+0

См. Update ... – Drew1208

Смежные вопросы