Ответ 1
У вас была такая же проблема, как вы, измените
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject])
к
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
i обновил Xcode 6 до Xcode 7 beta с Swift 2. Я получаю эту ошибку, и я не могу узнать, как ее исправить, пожалуйста, помогите мне. Благодарю. Это мой код:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
let location = locations.last as! CLLocation
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
self.map.setRegion(region, animated: true)
}
и я получаю эту ошибку:
Objective-C method 'locationManager:didUpdateLocations:' provided by method 'locationManager(_:didUpdateLocations:)' conflicts with optional requirement method 'locationManager(_:didUpdateLocations:)' in protocol 'CLLocationManagerDelegate'
У вас была такая же проблема, как вы, измените
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject])
к
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
Нажмите на свой проект - перейдите к разделу "Сборка фаз- > " Связывание двоичных файлов с библиотеками "и добавьте CoreLocation.framework
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
var LatitudeGPS = NSString()
var LongitudeGPS = NSString()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
updateLocation()
func updateLocation() {
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
//self.locationManager.distanceFilter = 10
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
locationManager.stopUpdatingLocation() // Stop Location Manager - keep here to run just once
LatitudeGPS = String(format: "%.6f", manager.location!.coordinate.latitude)
LongitudeGPS = String(format: "%.6f", manager.location!.coordinate.longitude)
print("Latitude - \(LatitudeGPS)")
}
Это мой код, который работает на xcode 7, также мне пришлось очистить свой код (Product- > Clean)
Вам нужно пометить свой класс или метод атрибутом @objc
. Итак, либо:
@objc class MyManagerDelegate: NSObject, CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
...
}
}
Или:
class MyManagerDelegate: CLLocationManagerDelegate {
@objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
...
}
}
Я решил это, выполнив следующий код:
//CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
let location:CLLocation = locations[locations.count-1] as! CLLocation
if (location.horizontalAccuracy > 0) {
self.locationManager.stopUpdatingLocation()
print(location.coordinate, terminator: "")
updateWeatherInfo(location.coordinate.latitude, longitude: location.coordinate.longitude)
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last as! CLLocation!
manager.stopUpdatingLocation()
let region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude), span: MKCoordinateSpan(latitudeDelta: 0.001, longitudeDelta: 0.001))
mapView.setRegion(region, animated: true)
}