Swift 无法显示用户位置快捷界面
在我发布代码之前,我应该告诉你我的代码在一个项目上运行,而在另一个项目上没有运行 我得到的错误是:Swift 无法显示用户位置快捷界面,swift,xcode,swiftui,Swift,Xcode,Swiftui,在我发布代码之前,我应该告诉你我的代码在一个项目上运行,而在另一个项目上没有运行 我得到的错误是: [MKCoreLocationProvider] CLLocationManager(<CLLocationManager: 0x280cfc050>) for <MKCoreLocationProvider: 0x283cd0870> did fail with error: Error Domain=kCLErrorDomain Code=1 "(null)&
[MKCoreLocationProvider] CLLocationManager(<CLLocationManager: 0x280cfc050>) for <MKCoreLocationProvider: 0x283cd0870> did fail with error: Error Domain=kCLErrorDomain Code=1 "(null)"
休息片刻后,我开始调试问题,我发现
init()
函数在文件3中没有被调用。位置管理器
我试着从其他文件初始化对象,猜猜它做了什么,没有任何问题,这是另一个有线的东西
因此,init()
函数是从其他文件调用的,但是在4中。UserLocationMapView
它没有被调用,我不明白为什么
喝了一杯咖啡后,我发现在SceneDelegate
中,我调用了错误的视图文件,其中显示了地图的UserLocationMapView
,但是我调用了3。SceneDelegate
中的MapView
这是一个愚蠢的错误,当您在
SceneDelegate
中调用这两个文件时,它们会毫无问题地显示地图。因此,当您看到模拟器中显示的映射时,您会认为它正在工作,但是其中一个调用了init()
函数,而其中一个没有该函数。您在Xcode中为两个项目启用了相同的功能吗?@JoakimDanielson是的,一切都完全相同,plist也被更新了,我发现LocationManager文件3中的init没有被调用,我不知道为什么!!?
import Foundation
import UIKit
import SwiftUI
import MapKit
struct MapView: UIViewRepresentable {
typealias UIViewType = UIView
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: Context) -> UIView {
let map = MKMapView()
map.delegate = context.coordinator
map.showsUserLocation = true
return map
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
import Foundation
import MapKit
class Coordinator: NSObject, MKMapViewDelegate {
var control: MapView
init(_ control: MapView) {
self.control = control
}
}
class GetUserLocation: NSObject, ObservableObject, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
@Published var location: CLLocation? = nil
override init() {
super.init()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.distanceFilter = kCLDistanceFilterNone
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else {
return
}
self.location = location
}
}