2015-05-05 3 views
0

Я делаю приложение, которое появляется с долготой, широтой, высотой и скоростью.Почему моя информация о CLLocation не отображается?

Всякий раз, когда я запускаю приложение: 1. Данные о местоположении не отображаются в ярлыках | 2. Я получаю это сообщение об ошибке:

fatal error: unexpectedly found nil while unwrapping an Optional value 

Что я делаю неправильно? Благодаря!

@IBOutlet weak var longitude: UILabel! 
@IBOutlet weak var latitude: UILabel! 
@IBOutlet weak var altitude: UILabel! 
@IBOutlet weak var speed: UILabel! 

var locationManager: CLLocationManager = CLLocationManager() 
var startLocation: CLLocation! 

@IBAction func reset(sender: AnyObject) { 
    startLocation = nil 
} 



func locationManager(manager: CLLocationManager!, 
    didUpdateLocations locations: [AnyObject]!) 
{ 
    var latestLocation: AnyObject = locations[locations.count - 1] 

    latitude.text = String(format: "%.4f", 
     latestLocation.coordinate.latitude) 
    longitude.text = String(format: "%.4f", 
     latestLocation.coordinate.longitude) 
    altitude.text = String(format: "%.4f", 
     latestLocation.altitude) 


    if startLocation == nil { 
     startLocation = latestLocation as! CLLocation 
    } 

    var distanceBetween: CLLocationDistance = 
    latestLocation.distanceFromLocation(startLocation) 

} 

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

} 

Тогда ...

override func viewDidLoad() { 
    super.viewDidLoad() 


    // Location 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.delegate = self 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.startUpdatingLocation() 
    startLocation = nil 


    // Do any additional setup after loading the view, typically from a nib. 

} 
+0

tl; dr Какая линия выдает ошибку? –

ответ

0

Declearing startLocation как неявно развернутый опциональный довольно рискованно здесь, так как он не предназначен, чтобы быть всегда! = Ноль.

Попробуйте его определения в качестве опции:

var startLocation: CLLocation? 

и изменить ресто вашего кода соответственно делает соответствующие проверки, где это необходимо.

В качестве примера, когда вы вычислить расстояние:

if let startLocation = startLocation { 
     var distanceBetween: CLLocationDistance = 
     latestLocation.distanceFromLocation(startLocation) 
} 

Может быть, где-то в вашем коде доступ startLocation когда это может быть nil

Так происходит ноль исключение при попытке установить текст метки широты, сначала я бы проверил, правильно ли подключен этот ярлык через Interface Builder. Является ли маленькая пуля слева от ее декларации цветной? В любом случае вы можете поставить точку останова перед этой строкой кода и проверить, что такое nil, и не должно.

+0

Ошибка на строке latitude.text. В общем, никаких результатов не возникает. Пожалуйста, помогите, как это исправить. @Matteo_Piombo – John

+0

Отредактировал свой ответ. –

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