gpt4 book ai didi

ios - 检查 CLLocationManager.location 是否为 nil

转载 作者:搜寻专家 更新时间:2023-11-01 06:10:00 25 4
gpt4 key购买 nike

当我缩放我的区域时,如果 locationManager.location 尚未完全初始化,我的应用程序会崩溃。

override func viewDidLoad() {
...
let regionToZoom = MKCoordinateRegionMake(locationManager.location.coordinate, MKCordinateSpanMake(0.01, 0.01))
mkMapView.setRegion(regionToZoom, animated: true)
}

本来我只是想像这样做一个简单的无限循环:

override func viewDidLoad() {
...
while (true) {
if locationManager.location != nil {
println("locationManager is ready, carrying on")
let regionToZoom = MKCoordinateRegionMake(locationManager.location.coordinate, MKCoordinateSpanMake(0.01, 0.01))
var timer:NSTimer? = nil
break
} else {
println("locationManager is nil, waiting 2000ms")
sleep(2)
}
...
}

然而随后发生了两件事。即将到来的对 mkMapView.setRegion() 的调用提示无法看到 regionToZoom,所以我不确定如何正确地使其在循环外可见,所以我只是将所有内容都放在 while 内环形。这有效.. 但是现在我正在阅读,如果我想在 Swift 中使用 sleep ,我可能应该使用 NSTimer。因此我想到了这个:

var timer:NSTimer? = nil

override func viewDidLoad() {
...
self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("checkLOCMAN"), userInfo: nil, repeats: true)

let regionToZoom = MKCoordinateRegionMake(locationManager.location.coordinate, MKCoordinateSpanMake(0.01, 0.01))
...
}
// Function to check
func checkLOCMAN() {
if locationManager.location != nil {
println("locationManager.location is set, carrying on")
self.timer?.invalidate()
} else {
println("locationManager.location is nil, waiting 2000ms")
}
}

但这并不能解决问题,如果 locationManager 为 nil,它仍然会崩溃。我认为我对此采用了过多的脚本方法,因为当它启动我的 NSTimer 时感觉并不像是在等待,而是此后仍在继续执行代码行。

有什么方法可以让它正常工作吗?我只是希望它在运行 mkMapView.setRegion() 之前一直检查 locationManager.location 直到它被初始化。

我对 Swift 还是个新手,所以我可能对这个问题想得太多了。

最佳答案

您不想假定位置管理器将具有有效的位置。您也不想让 while 循环或计时器等待它。

你想要做的是在viewDidLoad中启动位置服务,使用requestWhenInUseAuthorizationrequestAlwaysAuthorization请求位置服务的权限(确保适当的NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription 键的 plist 字符串已设置)然后等待 CLLocationManagerDelegatedidUpdateLocations 方法被叫。只有这样你才会有一个有效的位置。

关于ios - 检查 CLLocationManager.location 是否为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27699386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com