2016-10-05 3 views
0

Я новичок в Xcode и Swift, и я пытаюсь просто создать карту, которая показывает текущее местоположение пользователей и обновляет его. У меня это до сих пор:MKMapView кажется нулевым?

import UIKit 
import MapKit 
import CoreLocation 

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 
    var mapp = MKMapView.self 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     if (CLLocationManager.locationServicesEnabled()) 
     { 
      self.locationManager.delegate = self 
      self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
      self.locationManager.requestWhenInUseAuthorization() 
      self.locationManager.startUpdatingLocation() 
      self.map.showsUserLocation = true 
     } 
     else 
     { 
      print("Location services are not enabled") 
     } 
    } 

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

    override func loadView() { 
     //let camera = GMSCameraPosition.camera(withLatitude: 36.2108, longitude: -81.6774, zoom: 15.0) 
     //let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 
     //mapView.isMyLocationEnabled = true 
     //view = mapView 
    } 


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    { 
     let location = locations.last 
     let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 
     let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.002, longitudeDelta: 0.002)) 
     self.map.setRegion(region, animated: true) 
     self.locationManager.stopUpdatingLocation() 
    } 

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) 
    { 
     print("Errors: " + error.localizedDescription) 
    } 
} 

Я сделал MapView в раскадровке и CTRL потащил его в файл (таким образом @IBOutlet слабой вар карте: MKMapView). Однако, когда я подключаю свой телефон и имитирую приложение, он дает мне «неожиданно найденный нуль при распаковке необязательного значения», а после некоторых операторов печати я обнаружил, что это произошло всякий раз, когда я ссылался на переменную карты. Почему это? Благодаря!

+0

вы проверили вкладку возможности вашего приложения? карты должны быть там (и по умолчанию это отключено). – lithium

+3

Удалите метод loadView. Это используется только тогда, когда вы программно создаете представления. При использовании раскадровки (или NIB) вы вводите свой код конфигурации в 'viewDidLoad', а не' loadView'. – Rob

+0

@Rob прав. Удалите 'loadView', и он должен работать. –

ответ

1

В комментариях исходное сообщение, Роб ответил на вопрос:..

"
Удалить метод loadView, который используется только тогда, когда вы программно создания представлений При использовании раскадровки (или NIBS), вы кладете код конфигурации в viewDidLoad, не loadView. - Rob»

спасибо Роб