Ошибка EXC Bad Instruction пытается получить текущее местоположение из другого класса?
У меня был Massive View Controller и я пытался разделить мой код на разные классы. Я создал класс CurrentLocation. В контроллере вида я вызвал метод google maps animateToLocation, и я получил плохую инструкцию EXC. Сделали немало исследований по правильной архитектуре приложения, но все еще новы и учимся на опыте. Использование Google Maps для iOS и попытка реализовать это правильно. Допустимо ли помещать место обновления в отдельный класс от ViewController. Затем просто вызывать методы, которые я хочу вызвать в ViewController? Я думаю, что правильно реализовал Model-View-Controller и, возможно, просто унаследовал то, чего не должен был иметь. Должно быть простое исправление, просто не знаю, с чего начать.
import UIKit
import GoogleMaps
class ViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate {
@IBOutlet weak var googleMapView: GMSMapView!
let locationManager = CLLocationManager()
let currentLocation = CurrentLocation()
override func viewDidLoad() {
super.viewDidLoad()
currentLocation.trackLocation
}
override func viewDidAppear(animated: Bool)
{
super.viewDidAppear(animated)
if CLLocationManager.locationServicesEnabled() {
googleMapView.myLocationEnabled = true
googleMapView.animateToLocation(currentLocation.coordinate) // EXC Bad Instruction
} else
{
locationManager.requestWhenInUseAuthorization()
}
}
import Foundation
import CoreLocation
import GoogleMaps
class CurrentLocation: NSObject,CLLocationManagerDelegate {
override init()
{
super.init()
}
var locationManager = CLLocationManager()
var location : CLLocation!
var coordinate : CLLocationCoordinate2D!
var latitude : CLLocationDegrees!
var longitude : CLLocationDegrees!
func trackLocation()
{
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
if CLLocationManager.locationServicesEnabled() {
location = locations.last
coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
latitude = coordinate.latitude
longitude = coordinate.longitude
}
}
1 ответ
Эта ошибка происходит потому, что currentLocation.coordinate
является nil
и вы обращаетесь к нему как к неявно развернутому необязательному. По сути, вы пытаетесь получить доступ к переменной, прежде чем она будет в чем-либо. Вам нужно инициализировать CLLocationManager
, попросите разрешения, а затем начните обновлять местоположение. Проверьте эту замечательную рецензию от NSHipster: Core Location в i OS 8.