2016-01-14 73 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

是的,我的壞。現在錯誤向下移動,讓位置= CLLocationCoordinate2D(latitude: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。那麼,這可能是(可能是因爲還沒有時間來獲得實際位置)。因此,當您嘗試獲取該位置的經度和緯度時,它們也是nil以及latlon。因此,當你強迫拆包它們時,你會崩潰,因爲你不能拆開nil

+0

我不知道你是怎麼做到的?請參閱我的更新。也許你可以看到最新的錯誤? –

+0

感謝您的時間和幫助 –

相關問題