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

感谢您的时间和帮助 –

相关问题