Я новичок в 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). Однако, когда я подключаю свой телефон и имитирую приложение, он дает мне «неожиданно найденный нуль при распаковке необязательного значения», а после некоторых операторов печати я обнаружил, что это произошло всякий раз, когда я ссылался на переменную карты. Почему это? Благодаря!
вы проверили вкладку возможности вашего приложения? карты должны быть там (и по умолчанию это отключено). – lithium
Удалите метод loadView. Это используется только тогда, когда вы программно создаете представления. При использовании раскадровки (или NIB) вы вводите свой код конфигурации в 'viewDidLoad', а не' loadView'. – Rob
@Rob прав. Удалите 'loadView', и он должен работать. –