swift - CCLocation 不断返回零。使用单例
问题描述
由于某种奇怪的原因,它会在我第一次尝试运行程序时崩溃,但如果我在模拟器仍在运行时再次运行它,它工作正常。这是给出问题的代码片段。
class CityList : NSObject, CLLocationManagerDelegate {
// stored properties
var cities: [City]
var currentLocation: CLLocation? = nil
static let sharedInstance = CityList()
static let firstNotif = Notification.Name(rawValue: "test")
static let secondNotif = Notification.Name(rawValue: "test2")
let locationManager = CLLocationManager()
// initializers
override init () {
cities = [
City(name: "Medford", state: "Oregon", latitude: 42.3266667, longitude: -122.8744444),
City(name: "Seattle", state: "Washington", latitude: 47.6063889, longitude: -122.3308333),
City(name: "Grants, Pass", state: "Oregon", latitude: 42.4391667, longitude: -123.3272222),
City(name: "Applegate", state: "Oregon", latitude: 42.2570662, longitude: -123.1683833),
City(name: "San Francisco", state: "California", latitude: 37.775, longitude: -122.4183333)
]
super.init()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()// request user authorization
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
currentLocation = locationManager.location
cities.append(City(name: "test", state: "test", location: currentLocation!))
}
解决方案
你必须实施locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
forCLLocationManagerDelegate
才能工作,像这样
import CoreLocation
public class Location: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
override convenience public init() {
self.init()
manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
manager.delegate = self
manager.requestWhenInUseAuthorization()
manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()
}
public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Error", error)
}
public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.first else {
return
}
print(location.coordinate.longitude)
print(location.coordinate.latitude)
}
}
推荐阅读
- c# - 尝试运行 ASP .Net Core 2.1 Web 应用程序时出现错误 502.5
- linux - 为什么 linux 上的 monodevelop 只提供“任何 cpu”平台?
- arrays - 使用数组索引中的变量输出 $Error
- c++11 - 如何在保持字符的同时加宽标准字符串?
- angular - 尝试运行 composer-rest-server 时管理员未注册错误
- swift - Swift,访问表格视图的数据
- sas - 从 EG 服务器将 ODS 文件写入本地计算机
- c++ - “std_lib_facilities.h”显示错误
- django-models - 有没有办法订购序列化程序的返回?django 休息框架
- jquery - 表在已使用 jquery 更改的固定位置上保持相同的大小