即使用户退出视图返回上一个视图,我也会尝试进行位置更新。 为了实现这一点,我创建了一个单独的类来处理我的位置更新,但我遇到了奇怪的行为。
首先,我的授权请求只是暂时弹出而不是消失,所以我将其移回实际视图。 但是我的位置更新仍然无效。 位置图标出现在设备上,但它从不进入didLocationUpdate功能。也没有输入didFailWithError。 我对iOS很陌生,所以我不知道我做错了什么。
这是我的班级:
import CoreLocation
class RouteLocation: NSObject, CLLocationManagerDelegate{
var locationManager:CLLocationManager!
var databasePath = ""
override init(){
super.init()
let dirPaths =
NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true)
let docsDir = dirPaths[0] as NSString
databasePath = docsDir.stringByAppendingPathComponent(
"\\firstAscent.db")
// For use in foreground
locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
// locationManager.requestAlwaysAuthorization()
// print("in location")
if CLLocationManager.locationServicesEnabled() {
print("System Services enabled")
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.distanceFilter = 10
self.locationManager.startUpdatingLocation()
}
}
var isLocationMising = true
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
let latitute = locValue.latitude
let longitute = locValue.longitude
print("locations = \(locValue.latitude) \(locValue.longitude)") //continues to make SQL query calls
我从视图中调用它:_ = RouteLocation()
答案 0 :(得分:1)
requestWhenInUse...
函数以异步方式运行。它将显示对话框,但同时继续处理其余代码。即使其他一切都正确,您的应用也不会在第一次(当获得许可时)正确运行。requestWhenInUseAuthorization
解释字符串?didUpdateLocation
。requestLocation
。 答案 1 :(得分:1)
代码中的所有内容都很完美,但委托方法不正确
像这样编写委托方法
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {let latitute = locValue.latitude
let longitute = locValue.longitude
print("locations = \(locValue.latitude) \(locValue.longitude)")
}