i使用3.1.0版的Google Maps SDK用于iOS。在loadView
功能中将view
分配给GMSMapView
时,应用程序会崩溃,以下错误:'NSInvalidArgumentException', reason: 'GMSx_GMMClientPropertiesRequestProto.screenPixelDensity: Attempt to set an unknown enum value (0)'
。它发生的原因真的很奇怪。我试图降级Google Maps的版本,但这无济于事。在AppDelegate
中,我提供API_KEY
。这是我的代码,我如何使用Google地图:
lazy var mapView: GMSMapView = GMSMapView(frame: .zero)
override func loadView() {
super.loadView()
view = mapView
}
发生此错误以及如何解决该错误的原因是什么?
update-1:我进行了一些实验,并在几个设备中测试了以下简单代码:
override func viewDidLoad() {
super.viewDidLoad()
let mapView = GMSMapView()
let dummyView = UIView()
dummyView.backgroundColor = .purple
view = mapView
}
此代码在iPhone 7上成功显示了一张地图,但在iPhone SE上出现同样的错误失败。两个设备在iOS 12.3.1上运行。它在初始化mapView
时未能将其设置为view
。即使我将dummyView
设置为view
,它也会崩溃,因为我初始化了mapView
。
Update-2:试图避免我自己初始化mapView
变量。创建的故事板,添加了视图,并指出该类是GMSMapView
并连接到我的视图控制器。从VC中删除了上述代码。在iPhone 7中工作,在iPhone SE中失败了,但错误的错误。
update-3:创建了新项目,并使用相同的API_KEY显示地图。它在iPhone SE工作!这意味着,问题不在设备中,而是在项目中。仍然不知道它在哪里,但也许是在豆荚中。
最后,在上面的所有更新之后,我想到了一个想法,我应该在手机中删除该应用并再次运行。然后,它起作用了!我不知道为什么它起作用。可能,此错误仅发生在该应用程序的调试版本中。
我在应用程序中使用本地化,当我更改语言时,我还添加了以下代码:
UserDefaults.standard.setValue(lang, forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
因此,通过评论它,然后重新安装我的应用程序,它起作用了!