2015-05-24 4 views
-1

Я пытаюсь получить позицию с помощью симулятора iOS простым быстрым кодом. Но в сеансе отладки функция обратного вызова не вызывается. Я установил виртуальную позицию для iOS-симулятора.Невозможно получить позицию от симулятора iOS

// ViewController.swift 
// helloWorld 
// 
// Created by on 5/17/15. 
// Copyright (c) 2015 All rights reserved. 
// 

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

    var locMan: CLLocationManager! 
    var lat: CLLocationDegrees! 
    var lng: CLLocationDegrees! 
    var hasPosData: Bool 

    required init(coder aDecoder: NSCoder) { 
     locMan = CLLocationManager() 
     lat = CLLocationDegrees() 
     lng = CLLocationDegrees() 
     hasPosData = false 
     super.init(coder: aDecoder) 
    } 

    func retreiveCurrentPos(){ 
     locMan.delegate = self 
     locMan.requestAlwaysAuthorization() 

     // start using GPS function 
     locMan.startUpdatingLocation() 
    } 

    func saveResult2File(){ 
     var contents: String 

     let dirToSave = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as! Array<String> 
     let file  = String(dirToSave[0]) + "pos.dat" 
     if(hasPosData){ 
      contents = String(format:"lat: %f lng: %f", lat, lng) 
     }else{ 
      contents = "Failed to retreive position data" 
     } 

     contents.writeToFile(file, atomically: true, encoding: NSUTF8StringEncoding, error: nil) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     retreiveCurrentPos() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) { 
     lat = newLocation.coordinate.latitude 
     lng = newLocation.coordinate.longitude 
     hasPosData = true 
     saveResult2File() 
    } 

    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) { 
     hasPosData = false 
     saveResult2File() 
    } 
} 
+0

вопрос: вы пытаетесь получить позицию ... что именно? – Michael

+1

вместо добавления фиктивных абзацев, чтобы сделать сообщение более длинным, вы должны больше объяснить проблему и, возможно, сказать что-то о GPS или таком ... – Michael

ответ

7

Вы должны установить местоположение в вашем тренажере IOS, это по-умолчанию, чтобы никто, что делает крах приложения, как вы не проверить его перед использованием. Также вам нужно добавить ключ в pList NSLocationWhenInUseUsageDescription, на всякий случай, когда вы забыли.

enter image description here

PLIST

enter image description here

+2

В iOS8 требуется добавить пару ключей NSLocationWhenInUseUsageDescription или NSLocationAlwaysUsageDescription в файл Info.plist , – tounaobun

+0

Я установил местоположение в моем симуляторе iOS. И я добавляю ключ NSLocationWhenInUseUsageDescription в pList. Но функция обратного вызова не вызывается. – kuni255

+1

Я замечаю, что вы не настроили точность, возможно, это проблема, попробуйте добавить locMan.desiredAccuracy = kCLLocationAccuracyBest, сразу после того, как вы установите делегата на себя. Дайте мне знать, если это сработает для вас. – Icaro

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