2016-01-14 2 views
0

Я делаю это приложение, где пользователи могут видеть свое местоположение и местоположение других пользователей. Недавно я только что получил сообщение об ошибке говорящееТема 1: EXC_BAD_INSTRUCTION

Тема 1: EXC_BAD_INSTRUCTION (код = EXC_1386_INVOP, субкодовое = 0x0)

на этой линии:

var lat = locationManager.location?.coordinate.latitude 

мне не удалось исправить ,

Что вызывает его и как его исправить?

Для любого, кто мог бы, как остальной код:

import UIKit 
import Parse 
import CoreLocation 
import MapKit 


class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

    var myLocation: [CLLocation] = [] 

    @IBOutlet weak var MapView: MKMapView! 
    @IBOutlet var UsernameTextField: UITextField! 
    @IBOutlet var PasswordTF: UITextField! 
    @IBOutlet var EmailTF: UITextField! 

    var locationManager: CLLocationManager! 

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

    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     let locationManager = CLLocationManager() 

     let lat = locationManager.location!.coordinate.latitude 
     let lon = locationManager.location!.coordinate.longitude 

     let location = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
     let span = MKCoordinateSpanMake(0.05, 0.05) 
     let region = MKCoordinateRegionMake(location, span) 
     MapView!.setRegion(region, animated: true) 

     let anotation = MKPointAnnotation() 
     anotation.coordinate = location 
     anotation.title = "My tittle" 
     anotation.subtitle = "My Subtitle" 

     MapView!.addAnnotation(anotation) 

     print("Welcome in MapViewController") 
    } 
} 
+0

Менеджер местоположений должен быть свойством, а не локальной переменной. – matt

+0

Да, мое плохое. Теперь ошибка переместилась вниз, чтобы разрешить location = CLLocationCoordinate2D (широта: lat !, longitude: lon!) –

+2

Ошибка, вероятно, вызвана принудительным отключением нулевого значения с использованием «!». Вы должны переписать свой код, чтобы избежать использования '!' для принудительного разворота.Переключитесь на необязательное связывание, чтобы определить, где находится неожиданное значение nil. –

ответ

0

Это то, что @matt говорит о:

Проблема в том, что вы просите место менеджера РАСПОЛОЖЕНИЕ в без проверки, чтобы увидеть, является ли результат равен нулю

Вот как проверить чтобы увидеть, если значение равно нулю:

вариант 1:

guard let lat = locationManager.location?.coordinate.latitude else { 
    return 
} 

вариант 2:

if let latCheck = locationManager.location?.coordinate.latitude { 
    // assign your lat value here 
} else { 
    // handle the problem 
} 

Вы должны изменить свое мышление, когда вы видите ! вы, вероятно, следует разворачивать ваше необязательное значение в одном из двух указанных выше способов.


обновление на основе комментариев:

Вы также можете попробовать создать новую переменную для работы и посмотреть, как это работает:

guard let location = locationManager.location else { 
    return 
} 

затем:

let lat = location.coordinate.latitude 
let lon = location.coordinate.longitude 
+0

Он по-прежнему хочет, чтобы я заставлял их обрезать «!». –

+0

, но мое приложение открывается без ошибок –

+0

@TomJames обновлено с другим возможным решением, если это не сработает, мне придется взглянуть, когда я вернусь домой –

0

Проблема заключается в том, что вы просите место Управляющего location без проверки, есть ли результат nil. Ну, это (вероятно, потому, что еще не было времени, чтобы получить фактическое местоположение). Поэтому, когда вы пытаетесь получить широту и долготу этого местоположения, lat и lon, они также являются nil. Поэтому, когда вы принудительно разворачиваете их, вы сбой, потому что вы не можете развернуть nil.

+0

Я не уверен, как вы это делаете? PLease см. Мое обновление. Может быть, вы можете понять, что не так? –

+0

Благодарим вас за ваше время и помощь –

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