当前位置: 首页 > 面试题库 >

没有调用CLLocationManager委托方法(已集成Google地图)

杨星纬
2023-03-14
问题内容

CLLocationManager的委托方法

didChangeAuthorizationStatus和didUpdateToLocation

没有接到电话。

位置始终使用说明键已添加到info.plist中,并且在我首次启动应用程序时也收到通知。

我能够看到谷歌地图,但是我看不到当前位置,当我更改位置时,它不会更新。基本上不会调用委托方法。

//码

import UIKit
import GoogleMaps

class ViewController: UIViewController,GMSMapViewDelegate {
    @IBOutlet weak var mapViewTest: GMSMapView!
    let locationManager = CLLocationManager()
    var currentLocation :CLLocation = CLLocation(latitude: 0.0, longitude: 0.0)
    var currentLatitude : Double = 0.0
    var currentLongitude : Double = 0.0
    override func viewDidLoad() 
     {
        super.viewDidLoad()``
        locationManager.delegate = self
        if (CLLocationManager.locationServicesEnabled())
        {
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
        }
        // Do any additional setup after loading the view, typically from a nib.
    }
}


    extension ViewController : CLLocationManagerDelegate
    {
       func locationManager(manager: CLLocationManager,     didChangeAuthorizationStatus status: CLAuthorizationStatus)
        {
            if status == .authorizedAlways
            {
                if(CLLocationManager .locationServicesEnabled())
                {
                    locationManager.startUpdatingLocation()
                    mapViewTest.isMyLocationEnabled = true
                    mapViewTest.settings.myLocationButton = true
                }
            }
        }
         func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation)
        {
            mapViewTest.camera = GMSCameraPosition(target: (newLocation.coordinate), zoom: 15, bearing: 0, viewingAngle: 0)
            currentLocation = newLocation
            currentLatitude = newLocation.coordinate.latitude
            currentLongitude = newLocation.coordinate.longitude

        }
        func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
        {
            print("Errors: " + error.localizedDescription)
        }
    }

问题答案:

在您的代码中,您正在使用Swift 3,并且在Swift 3中,CLLocationManagerDelegate方法的签名是这样更改的。

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

}

//func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, 
       from oldLocation: CLLocation) is deprecated with below one
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

}

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {

}

有关CLLocationManagerDelegate更多详细信息,请参阅Apple文档。



 类似资料:
  • 我在Xcode6中创建了新项目,并将旧文件添加到这个项目中(旧文件在xcode5中创建),但发生的事情是一切正常,但“didupdateTolocation”委托方法没有调用,我也使用了“didupdateLocations”委托方法,但两者都不工作。我从旧文件中使用的代码,但核心位置框架是从Xcode6中添加的,我不知道我缺少什么,请任何人指导我获得解决方案。

  • 我想在我的应用程序中使用插屏广告,所以我实现了所有必要的委托方法。问题是,如果我使用[self Request estInterstitialAdPresent]来显示广告,只有interstitialAdddLoad:方法被调用。interstitialAdActionddFinish:方法没有被调用... 但是,如果我使用已弃用的[self.interstitialPresinFromView

  • 在Kotlin中使用类委托时,可以覆盖成员。然而,关于代表团的参考页上说: 但是,请注意,以这种方式重写的成员不会从委托对象的成员中调用,委托对象只能访问其自己的接口成员实现。 我想重写委托对象的方法使用的属性,以便委托对象的方法调用此重写属性。正如文档所述,用关键字覆盖属性并不能实现这一点。有什么方法可以让我实现这种行为吗?如果不是,这是否表明我应该改用继承? 这是一个代码示例: 这段代码打印“

  • 1.子类扩展父类。2.子类实现Cloneable并重写clone()方法调用super。clone()3.父类既不实现Cloneable接口,也不重写clone(()方法。 输出:克隆父类和子类状态。 问题:在父类没有实现标记接口Cloneable的情况下,父类状态如何被对象类克隆?

  • webrtc库调用某个内部方法并获取多余的\u错误。然后坠毁了 如果需要更多信息,请询问。 //代码 我在这里喝了一口。 此代理调用时发生崩溃。 事故报告 异常类型:EXC_BAD_ACCESS(SIGSEGV)异常子类型:KERN_在0x5000000000000038处的地址无效终止信号:分段错误:11终止原因:命名空间信号,代码0xb终止进程:由线程触发的EXC处理程序[0]:9 筛选的系统

  • 生成器委托 PHP7中支持delegating generator,可以自动展开subgenerator; A “subgenerator” is a Generator used in the portion of the yield from syntax. 我们需要在PHP5支持子生成器,将子生成器最后yield值作为父生成器yield表达式结果,仅只需要加两行代码,递归的产生一个Async