2017-12-03 27 views
-2

here 안내에 따라 내 애플리케이션에지도를 포함하려고합니다. 문제는 지역을 설정할 때 오류가 발생한다는 것입니다. 코드 행 "let region = MKMap ..."을 입력하면 그 이유를 알 수 없습니다. 누구든지이 문제를 겪었거나 도움을 줄 방법을 알고 있습니까? 감사!MKMap 옵션에 대해 선택 해제 래시 오류가 발생했습니다.

코드 업데이트 :

import UIKit 
import MapKit 
import CoreLocation 

class ViewController: UIViewController, MKMapViewDelegate { 

    // MARK: Properties 
    @IBOutlet weak var MapView: MKMapView! 
    var locationManager = CLLocationManager.init() 

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

     locationManager.requestWhenInUseAuthorization() 

     MapView.mapType = .standard 
     MapView.showsUserLocation = true 
     MapView.showsScale = true 
     MapView.showsCompass = true 

     let span = MKCoordinateSpan.init(latitudeDelta: 0.0075, longitudeDelta: 0.0075) 
     let region = MKCoordinateRegion.init(center: (locationManager.location?.coordinate)!, span: span) 
     MapView.setRegion(region, animated: true) 
    } 

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


} 

오류 업데이트 : 오류를 발생시키는 줄은 다음과 같습니다

let region = MKCoordinateRegion.init(center: (locationManager.location?.coordinate)!, span: span) 

및 오류는 다음과 같습니다

스레드 1 : EXC_BAD_INSTRUCTION (코드 = EXC_I386_INVOP , subcode = 0x0)

+0

관련 코드로 질문을 업데이트하고 오류의 원인이되는 행을 명확하게 표시하고 완전하고 정확한 오류 메시지. – rmaddy

+0

나중에 값을 언랩하는 경우 옵션 체인을 사용하는 것은 의미가 없습니다 ... 문제가 어디에서 왔는지 확실하게 알 수 있습니다. 옵션을 올바르게 처리하고, 'nil'일 수있는 옵션에 대해 언 래핑을 사용하지 마십시오. 또한'init'을 명시 적으로 호출하지 말고'MKCoordinateRegion (center : span :)'단축형 표기법을 사용하십시오. –

+0

죄송합니다. iOS 및 Swift 프로그래밍을 처음 사용합니다. 내 원래 게시물의 링크는 워크 플로우 가이드를 제공했지만 스택 오버플로의 다른 링크는 내가 사용하기에 확실하지 않은 코드 스 니펫을 제공했습니다. 그래서'MKCoordinateRegion'과'?'에서'.init'을'locationManager.location? '으로부터 제거 할 것을 추천합니다. – user282041

답변

1

코드가 항상 충돌합니다.

locationManager.requestWhenInUseAuthorization() 
    // ... 
    let region = MKCoordinateRegion.init(center: (locationManager.location?.coordinate)!, span: span) 

그래서 더 지시 장치의 위치를 ​​받기 시작되지 수있는 위치 관리자를 주었다, 그러나 여기에서 당신은 힘 랩핑 해제 위치 관리자의 위치를 ​​위치 : 말하고있다. 당연히 그 위치는 nil이며 자연히 충돌합니다.

당신의 목표는지도가 사용자의 위치를 ​​표시하는 것입니다 경우, 설정지도의 showsUserLocation 또는 (더 나은)의 userTrackingMode정지. 그냥 뒤로 서서지도 작업을하도록하십시오. 해당 지역의 지시를 시도하여지도보기와 싸우지 마십시오. 사용자의 위치를 ​​표시하는 것보다 더 잘 알고 있습니다.