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

Swift:Corelocation处理didFailWithError中的NSError

贝成业
2023-03-14
问题内容

我正在使用CoreLocation成功确定用户的位置。但是,当我尝试使用CLLocationManagerDelegate方法时:

func locationManager(_ manager: CLLocationManager!, didFailWithError error: NSError!)

我遇到了错误术语的问题。

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    println("didFailWithError \(error)")

    if let err = error {
        if err.code == kCLErrorLocationUnknown {
            return
        }
    }
}

这将导致出现“使用未解决的标识符kCLErrorLocationUnknown”错误消息。我知道kCLErrors是枚举,并且它们已经在Swift中发展了,但我陷入了困境。


问题答案:

Swift 4更新: 错误现在传递给回调error: Error,可以将其转换为CLError

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    if let clErr = error as? CLError {
        switch clErr {
        case CLError.locationUnknown:
            print("location unknown")
        case CLError.denied:
            print("denied")
        default:
            print("other Core Location error")
        }
    } else {
        print("other error:", error.localizedDescription)
    }
}

较旧的答案: 核心位置错误代码定义为

enum CLError : Int {
    case LocationUnknown // location is currently unknown, but CL will keep trying
    case Denied // Access to location or ranging has been denied by the user
    // ...
}

并将枚举值与整数进行比较err.codetoRaw() 可以使用:

if err.code == CLError.LocationUnknown.toRaw() { ...

或者,您可以CLError根据错误代码创建一个,然后检查是否有可能的值:

if let clErr = CLError.fromRaw(err.code) {
    switch clErr {
    case .LocationUnknown:
        println("location unknown")
    case .Denied:
        println("denied")
    default:
        println("unknown Core Location error")
    }
} else {
    println("other error")
}

更新: 在Xcode 6.1 beta
2中,fromRaw()toRaw()方法分别被init?(rawValue:)初始化器和rawValue属性代替:

if err.code == CLError.LocationUnknown.rawValue { ... }

if let clErr = CLError(rawValue: code) { ... }


 类似资料:
  • 我是Spring批处理的新手,我只想问如何从多行结果集中检索数据。我有以下场景: > 有两个不同的表说员工 使用时,我只能创建一个工资单子级,但该表可能有多个子级。请帮助...

  • 我主要是为技术精明的人编写一个小工具,例如程序员、工程师等,因为这些工具通常是快速的,随着时间的推移,我知道会有未处理的异常,用户不会介意。我希望用户能够向我发送回溯,这样我就可以检查发生了什么,并可能改进应用程序。 我通常做wxPython编程,但我最近做了一些Java。我已经将

  • 我在中看到了几个答案(例如这里),因此建议批次中的记录将成为单个RDD。我对此表示怀疑,因为假设batchInterval为1分钟,那么单个RDD将包含最后一分钟的所有数据? 注意:我不是直接将批次与RDD进行比较,而是将Spark内部处理的批次进行比较。

  • null 其中lambda1、2等是条件检查函数,例如 但不知什么原因对我不起作用,也许还有其他方法?正如我从文档(https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/side_output.html)中了解到的,OutputTag用于创建标记为tag的附加消息。还是我错了?

  • 问题内容: 我的问题与春季批次和交易有关。 假设我为我的步骤之一选择了 50 的 提交间隔 。 还要假设我总共有1000条记录,其中一条记录将导致itemWriter失败,从而导致整个块的回滚(在我的示例中为50条记录)。 确保作业完成(并忽略有问题的块)后将49个有效记录写入数据库的状态有哪些? 问题答案: 经过研究,我得出以下结论: 如果项目编写者未能提交一个块(此处为50个项目)从而导致回滚

  • 我正在探索AWS Kinesis的数据处理要求,该要求用基于流的方法取代旧的批处理ETL处理。 该项目的关键要求之一是在以下情况下重新处理数据的能力: 发现并修复错误,然后重新部署应用程序。数据需要从一开始就重新处理 这里很好地记录了Kafka-https://cwiki.apache.org/confluence/display/KAFKA/Kafka流数据(重新)处理场景的场景。 我在Kine