SWIFT 线程 1:EXC 错误指令 XCODE IOS
Posted
技术标签:
【中文标题】SWIFT 线程 1:EXC 错误指令 XCODE IOS【英文标题】:SWIFT Thread 1: EXC Bad instruction XCODE IOS 【发布时间】:2016-01-11 20:09:50 【问题描述】:我是 stackexchange 的新手,所以如果我需要提供更多信息,请告诉我。
我尝试安装 Corelocation 和 Mapkit 并一起使用它们。自从我遵循 Vea Software Tutorial 以来,我都收到以下错误:
线程 1:EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP,subcode=0x0)
在编译器中它说
致命错误:在展开 Optional 时意外发现 nil 值(llDB)
错误出现在这一行,但是当我删除它时,它出现在另一个 Mapkit/Location 核心行。错误:
self.mapView.showsUserLocation = true
编辑:当我删除上面的行时,同样的错误出现在
self.mapView.setRegion(region, animated: true)
我在互联网上搜索了一段时间,但没有什么能真正帮助我。感谢您的宝贵时间。
如果您需要完整的视图控制器代码。在这里。
import UIKit
import Parse
import CoreLocation
import MapKit
class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
@IBOutlet var UsernameTextField: UITextField!
@IBOutlet var PasswordTF: UITextField!
@IBOutlet var EmailTF: UITextField!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
self.mapView.showsUserLocation = true
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
// MARK: - Location Delegate Methods
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
let location = locations.last
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1))
self.mapView.setRegion(region, animated: true)
self.locationManager.stopUpdatingLocation()
func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
print("Error:" + error.localizedDescription)
【问题讨论】:
所有带有感叹号的变量都被强制解包,因此其中任何一个都可能导致您的应用程序因该错误而崩溃。同样在您的代码中,我看到let location = locations.last
,然后您使用location!
。任何机会位置都为零?
我尝试进入调试 -> 模拟位置,选择了一个随机位置,然后尝试运行它。仍然遇到同样的错误
这并不能真正回答我的问题,我会认为它是否定的。什么错误消息告诉的是,这些选项中的任何一个 @IBOutlet weak var mapView: MKMapView! @IBOutlet var UsernameTextField: UITextField! @IBOutlet var PasswordTF: UITextField! @IBOutlet var EmailTF: UITextField! let location = locations.last
是 .None (nil) 而不是 .Some 所以我的建议是检查这些。也许如果您的 xib 他们正在引用不再存在的东西
对不起。我以为我已经从脚本中删除了这些以保持相关性。在我尝试添加 Mapkit 和 Corelocation 之前,这些代码运行良好。
另外我刚刚注意到您的变量名称对于大多数出口都是大写的。不知道你是不是故意的。
【参考方案1】:
这只是我注意到你使用的一个假设
self.mapView.setRegion(region, animated: true)
在 CLLocationManager 委托中并在 mapView 实际显示之前开始更新(即在 viewDidLoad 中)。
可能是 mapView 在安装到视图层次结构之前尝试更新其视觉状态吗?
【讨论】:
对不起,我不太明白你的意思。在更新位置之前,我尝试移动 self.mapView.setRegion。不工作。当我删除 self.mapView.showsUserlocation (错误所在)时,错误出现在另一个 .mapView 中。 (self.mapView.setRegion) 我无法对此进行测试,但根据使用其他组件的类似经验,我建议您将 self.locationManager.startUpdatingLocation() 和 self.mapView.showsUserLocation = true 移至在视图层次结构已准备就绪。例如viewWillAppear 或 viewDidAppear 当我将“self.mapView.showsUserLocation = true”放在“func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) ”下时,该应用程序运行良好,没有错误,但它不会看起来我的位置 你试过我的建议了吗?即将 self.locationManager.startUpdatingLocation() 和 self.mapView.showsUserLocation = true 移动到 viewDidAppear()以上是关于SWIFT 线程 1:EXC 错误指令 XCODE IOS的主要内容,如果未能解决你的问题,请参考以下文章
Swift PrepareForSegue EXC_BREAKPOINT
Xcode 9.3.1 - iOS Swift 4.1 UITextView.becomeFirstResponder 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x4d555458)
xcode 6 beta EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0) in swift
Swift + iOS,HANDYJSON 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x20c7f4194)