无法从角落4迅速插入法律归属

我是Xcode和移动应用程序的新手。 我正在做一个应用程序来查找当前位置。 我在模拟器上测试了它并在控制台中得到了这条消息。 “无法在角落4处插入法律归属”。 它是什么意思,我该如何解决?

import UIKit import Alamofire import AlamofireImage import MapKit import CoreLocation class MapVC: UIViewController @IBOutlet weak var mapView: MKMapView! var locationManager = CLLocationManager() let authorizationStatus = CLLocationManager.authorizationStatus() let regionRadius: Double = 1000 override func viewDidLoad() { super.viewDidLoad() mapView.delegate = self locationManager.delegate = self configureLocationServices() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func centerMapPressed(_ sender: Any) { if authorizationStatus == .authorizedAlways || authorizationStatus == .authorizedWhenInUse{ centerMapOnUserLocation() } } 

MKMapViewDelegate:

 func centerMapOnUserLocation(){ guard let coordinate = locationManager.location?.coordinate else{return} let coordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, regionRadius*2.0, regionRadius * 2.0 ) mapView.setRegion(coordinateRegion, animated: true) } 

CLLocationManagerDelegate:

 func configureLocationServices(){ if authorizationStatus == .notDetermined{ locationManager.requestAlwaysAuthorization() }else{ return} } func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { centerMapOnUserLocation() } 

如果找不到正确格式的必需信息,则会出现此问题。 如果你的设备我试图获得一些位置或某个数字变量,并且afun需要a变量..该值未设置为a ,但afun被称为发生此错误..

在没有任何其他function的情况下调用viewdidload单元格坐标。

这是获得细胞位置的最简单方法。 1.您应该在infor.plist下更新设备的隐私

在关闭标记之前将以下行添加到plist中

  NSLocationAlwaysAndWhenInUseUsageDescription Privacy - Location Always and When In Use Usage Description NSLocationAlwaysUsageDescription Privacy - Location Always Usage Description NSLocationWhenInUseUsageDescription Privacy - Location When In Use Usage Description 

之后..这是最简单的工作代码..我很高兴使用它没有问题..

 import CoreLocation import MapKit class AddressVc: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { @IBOutlet weak var map: MKMapView! var locationManager = CLLocationManager() 

这里是代码,用于在所需位置的中心移动地图

  let latDelta:Double = 0.5 let lngDelta:Double = 0.5 let latitude:Double = 37.57554038 let longitude:Double = -122.40068475 let locationcoordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) let zoomSpan = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lngDelta) let region = MKCoordinateRegion(center: locationcoordinates, span: zoomSpan) self.map.setRegion(region, animated: true) 

在上面的代码..如果你把设备的lat和lng位置放在纬度和lognitude,将地图移动到你的设备的位置。

现在如何获取设备的位置。 这是您可以放入viewDidLoad()函数的代码。

 override func viewDidLoad() { super.viewDidLoad() locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() // device latitude = (locationManager.location?.coordinate.latitude)! // device longitude = (locationManager.location?.coordinate.longitude)! } 

这是检测设备的纬度和经度值。 你可以把它们放在上面提到的代码中..

这是完整的代码。


 import CoreLocation import MapKit class AddressVc: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { @IBOutlet weak var map: MKMapView! var locationManager = CLLocationManager() override func viewDidLoad() { super.viewDidLoad() locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() devicelatitude = (locationManager.location?.coordinate.latitude)! devicelongitude = (locationManager.location?.coordinate.longitude)! let latDelta:Double = 0.5 let lngDelta:Double = 0.5 let latitude:Double = devicelatitude let longitude:Double = devicelongitude let locationcoordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) let zoomSpan = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lngDelta) let region = MKCoordinateRegion(center: locationcoordinates, span: zoomSpan) self.map.setRegion(region, animated: true) } 

我希望这会对你有所帮助..如果不是……还会有很多其他人面临这个问题。

==========================

打开模拟器后,转到mac顶部栏上的DEBUG菜单,最后一个选项是location,当设置为NONE时我的显示此错误。 设置自定义位置,首先提示您到新窗口的自定义位置,填写,关闭模拟器,然后重新启动应用程序。 它现在应该从您的代码中获取自定义位置。 (andrecasarini学分)

当MapView左下角的“Legal”链接不在边界内或被遮挡时,会发生此错误。 地图的比例和旋转时出现的指南针也有类似的错误。

考虑使用大小约束或safeAreaInset

我认为法律插入错误在Apple的mapkit初始化代码中,与我们使用代码时的操作无关。 这是我的推理。

如果您使用故事板和UIMapKit拖放模块,则在应用程序委托中对应用程序的初始调用的调用和第一个viewDidLoad调用之间会出现合法插入错误,即,它是操作系统错误。

我很好奇,如果我可以解决它并写了一个不使用故事板编辑器的版本。 我在想,也许编辑器正在将一些破碎的代码插入到应用程序中。 我的测试应用程序有两个视图,开始视图和第二个视图,上面有地图。 代码如下所示。 不要太苛刻,这是我第一次尝试使用程序化视图和子视图来理解控制器视图和子视图的内容。 它不漂亮,但它可以隔离合法插入错误。

我开始构建一个新的xcode项目并删除故事板。 然后我使用以下代码替换了appdelegate中的应用程序函数存根:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. self.window = UIWindow(frame: UIScreen.main.bounds) let viewController = ViewController() self.window?.rootViewController = viewController self.window?.makeKeyAndVisible() let mapView = mapViewController() mapView.otherView = viewController viewController.mapView = mapView return true } 

即使在此处创建了mapView,也不会显示合法插入错误。 显示的是关于规模和指南针的其他几个消息,它们存在某种问题。 由于我专注于法律插入错误,我忽略了它们并继续前进。

然后我用创建了两个子视图的代码替换了默认视图控制器,一个子视图用作切换到第二个视图控制器的按钮,另一个子视图用作“你在第一个视图”标记视图。 这需要弄清楚如何处理水龙头。 点击处理程序中的颜色更改代码是最初的“hello world。我看到了一个tap”代码并没有其他用途。

 import UIKit import MapKit import CoreLocation class ViewController: UIViewController,CLLocationManagerDelegate { let DynamicView = UIView() let switchView = UIView(frame: CGRect(x: UIScreen.main.bounds.minX+10, y: UIScreen.main.bounds.minY+20, width: 40, height: 40)) public var mapView:mapViewController? = nil public var otherView:UIViewController? = nil override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = .white DynamicView.backgroundColor = .yellow DynamicView.layer.cornerRadius = 25 DynamicView.layer.borderWidth = 2 switchView.backgroundColor = .orange switchView.layer.borderWidth = 2 var gR = UITapGestureRecognizer(target: self, action:#selector(self.handlebigTap(_:))) DynamicView.addGestureRecognizer(gR) gR = UITapGestureRecognizer(target: self, action:#selector(self.handlesmallTap(_:))) switchView.addGestureRecognizer(gR) self.view.addSubview(switchView) self.view.addSubview(DynamicView) DynamicView.translatesAutoresizingMaskIntoConstraints = false let margins = view.layoutMarginsGuide DynamicView.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 10).isActive = true DynamicView.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: 10).isActive = true DynamicView.topAnchor.constraint(equalTo: margins.topAnchor, constant: 40).isActive = true DynamicView.bottomAnchor.constraint(equalTo: margins.topAnchor, constant: 110).isActive = true } @objc func handlebigTap(_ sender: UITapGestureRecognizer) { if ( self.DynamicView.backgroundColor == .green){ self.DynamicView.backgroundColor = .blue } else { self.DynamicView.backgroundColor = .green } } @objc func handlesmallTap(_ sender: UITapGestureRecognizer) { if ( self.switchView.backgroundColor == .orange){ self.switchView.backgroundColor = .blue present(mapView!, animated: true, completion: nil) } else { self.switchView.backgroundColor = .orange } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } 

}

此时,我检查了第一次调用viewDidLoad是否触发了合法插入错误,并发现它没有。 这意味着错误是在mapKit初始化代码中的某处触发的,该代码尚未构建。 我只是将第一个viewController复制并粘贴到一个新文件中并调用mapViewController。 我注释掉了第一个控制器遗留下来的DynamicView代码,并添加了mapKit初始化代码,如下所示:

 import UIKit import MapKit import CoreLocation class mapViewController: UIViewController,CLLocationManagerDelegate,MKMapViewDelegate { let DynamicView = UIView(frame: CGRect(x: UIScreen.main.bounds.maxX-110, y: UIScreen.main.bounds.maxY-110, width: 100, height: 100)) let switchView = UIView(frame: CGRect(x: UIScreen.main.bounds.minX+10, y: UIScreen.main.bounds.minY+20, width: 40, height: 40)) var mapView = MKMapView() public var otherView:UIViewController? = nil override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = .white // DynamicView.backgroundColor = .yellow // DynamicView.layer.cornerRadius = 25 // DynamicView.layer.borderWidth = 2 switchView.backgroundColor = .orange switchView.layer.borderWidth = 2 var gR = UITapGestureRecognizer(target: self, action:#selector(self.handlebigTap(_:))) DynamicView.addGestureRecognizer(gR) gR = UITapGestureRecognizer(target: self, action:#selector(self.handlesmallTap(_:))) switchView.addGestureRecognizer(gR) self.view.addSubview(switchView) // self.view.addSubview(DynamicView) // mapView.frame = CGRect(x: 10, y: 60, width: view.frame.size.width-20, height: 300) mapView.mapType = MKMapType.standard mapView.isZoomEnabled = true mapView.isScrollEnabled = true view.addSubview(mapView) mapView.translatesAutoresizingMaskIntoConstraints = false let margins = view.layoutMarginsGuide mapView.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 10).isActive = true mapView.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: 0).isActive = true mapView.topAnchor.constraint(equalTo: margins.topAnchor, constant: 45).isActive = true mapView.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: -20).isActive = true } @objc func handlebigTap(_ sender: UITapGestureRecognizer) { if ( self.DynamicView.backgroundColor == .green){ self.DynamicView.backgroundColor = .blue } else { self.DynamicView.backgroundColor = .green } } @objc func handlesmallTap(_ sender: UITapGestureRecognizer) { if ( self.switchView.backgroundColor == .orange){ self.switchView.backgroundColor = .blue dismiss(animated: true, completion: nil) } else { self.switchView.backgroundColor = .orange } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) } 

}

我运行上面的代码并逐步查找要显示的合法插入消息。 这是违规行:

mapView.frame = CGRect(x:10,y:60,width:view.frame.size.width-20,height:300)

一旦视图被框起,就会出现错误消息。 无论您给视图提供什么尺寸,都会显示消息。 好的….也许消息需要基于约束的成帧而不是每个违规行的硬编码。

我注释掉了该行并为视图添加了约束,但仍然弹出了错误。

此时我放弃了。 我无法弄清楚如何配置地图视图,因此错误消息不会显示。 希望Apple能够在这一点上进行说明,或者其他人会拿起接力棒来查看是否有办法配置mapkit以停止喷出错误消息。

至于我自己,至少我学会了如何动态添加视图,子视图,手势识别器和约束,这样我的时间就可以用来追逐bug。 感谢所有发布样本动态视图代码,手势识别代码,子视图代码和约束代码的人。 你可能会在这里认出一些代码。

您没有为MapVC类输入左大括号:

你的代码:

 class MapVC: UIViewController 

修理:

 class MapVC: UIViewController {