解开一个可选的nil值

乔什·奥康纳(Josh O'Connor)

我遇到一个涉及可选项的常见错误,并且我有一个NSUserDefault值,值是使用位置管理器功能的用户位置:

func locationManager(manager: CLLocationManager!,
    didUpdateLocations locations: [AnyObject]!)
{

    //First Convert it to NSNumber.
    let lat : NSNumber = NSNumber(double: latestLocation.coordinate.latitude)
    let lng : NSNumber = NSNumber(double: latestLocation.coordinate.longitude)

    //Store it into Dictionary
    let locationDict = ["lat": lat, "lng": lng]

    //Store that Dictionary into NSUserDefaults
    NSUserDefaults.standardUserDefaults().setObject(locationDict, forKey: "Location")
}

当我运行我的应用程序时,它let userLoc = NSUserDefaults在我的viewDidLoad()方法中以下代码块的行...上崩溃

    let userLoc = NSUserDefaults.standardUserDefaults().objectForKey("Location") as! [String : NSNumber]

    //Grab location from that Dictionary (from func LocationManager below)
    let userLat = userLoc["lat"]
    let userLng = userLoc["lng"]

    //declare MKPointAnnotation()
    var Annotation = MKPointAnnotation()
    //Convert NSNumber to CLLocationDegrees
    Annotation.coordinate.latitude = userLat as! CLLocationDegrees
    Annotation.coordinate.longitude = userLng as! CLLocationDegrees

错误是:

fatal error: unexpectedly found nil while unwrapping an Optional value.

我怀疑这是因为我没有存储变量

NSUserDefaults.standardUserDefaults().objectForKey("Location") 

直到viewDidLoad方法运行之后。

如何避免此错误?我应该locationManager()在加载的视图中运行该函数吗?
我试着有一个错误...

任何帮助将不胜感激。我已经坚持了几个小时。

乔希

保尔11

当您使用'!'时,请务必小心。解开可选或强制转换值。这说:“我知道这不是nil /此类的实例,如果不是,则不好,并引发异常”

如果有可能是nil /不是所需类的实例,则应使用'?' 并适当地对结果采取行动。

if let userLoc = NSUserDefaults.standardUserDefaults().objectForKey("Location") as? [String : NSNumber] {

    //Grab location from that Dictionary (from func LocationManager below)
    let userLat = userLoc["lat"]
    let userLng = userLoc["lng"]

    //declare MKPointAnnotation()
    var Annotation = MKPointAnnotation()
    //Convert NSNumber to CLLocationDegrees
    Annotation.coordinate.latitude = userLat as! CLLocationDegrees
    Annotation.coordinate.longitude = userLng as! CLLocationDegrees
}

您第二次使用“!” -将纬度/经度分配给坐标是正确的-如果强制转换不成功,则存储的数据有问题,崩溃可能是一种合理的方法,您可以进行调试。

如果数据来自某个外部来源,并且可能无效,则使用“?” 并且某种错误处理仍可能是更好的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Xcode 强迫我解开一个非可选的值

来自分类Dev

快速致命错误:在我的代码中从电子邮件中解开一个可选值(lldb)时意外发现nil?

来自分类Dev

在加载表视图数据时解开一个 Optional 值时意外发现 nil

来自分类Dev

CLLocationManager致命错误:展开一个可选值时意外发现nil Swift

来自分类Dev

Swift Optionals-展开一个可选值时意外发现nil

来自分类Dev

展开一个可选值uitextfield时意外地找到nil

来自分类Dev

致命错误:展开一个可选值SwiftUI AnimatedImage时意外发现nil

来自分类Dev

PhysicsWorld:展开一个可选值时意外发现nil

来自分类Dev

展开一个可选值NSDefautlts时发现nil的快速问题

来自分类Dev

CLLocationManager:展开一个可选值时意外找到Nil

来自分类Dev

NSData:展开一个可选值时意外发现nil

来自分类Dev

展开一个可选值时意外发现nil(AppleScript结果)

来自分类Dev

NSJSONSerialization:展开一个可选值时意外发现nil

来自分类Dev

展开一个可选值uitextfield时意外地找到nil

来自分类Dev

展开一个可选IBOutlet值时为Nil

来自分类Dev

UITableViewCell中的AVPlayer导致“意外发现nil,同时隐式展开一个可选值”错误

来自分类Dev

在swift中解开一个optional是一个可选的,但是swift不知道它是一个可选的

来自分类Dev

在回调函数 swift 上解开一个 Optional 值

来自分类Dev

# 在转换之前解开一个行列表

来自分类Dev

如何解开可选绑定并将值传递给另一个视图?

来自分类Dev

如何解开一个List <地图>,基团通过地图键和由地图值减少

来自分类Dev

Swift陀螺仪:展开一个Optional值时意外地发现nil

来自分类Dev

如何在jQuery中仅解开一个父级

来自分类Dev

帮助GHC在常数上解开一个整数中的Int

来自分类Dev

如何在jQuery中仅解开一个父级

来自分类Dev

我如何解开一个动作?我目前的方法似乎不起作用

来自分类Dev

removeFromSuperView()和cells =致命错误:展开一个可选值时意外发现为零

来自分类Dev

从另一个场景调用时,“在展开可选值时意外发现nil”

来自分类Dev

致命错误:解开可选值(lldb)时意外发现nil

Related 相关文章

  1. 1

    Xcode 强迫我解开一个非可选的值

  2. 2

    快速致命错误:在我的代码中从电子邮件中解开一个可选值(lldb)时意外发现nil?

  3. 3

    在加载表视图数据时解开一个 Optional 值时意外发现 nil

  4. 4

    CLLocationManager致命错误:展开一个可选值时意外发现nil Swift

  5. 5

    Swift Optionals-展开一个可选值时意外发现nil

  6. 6

    展开一个可选值uitextfield时意外地找到nil

  7. 7

    致命错误:展开一个可选值SwiftUI AnimatedImage时意外发现nil

  8. 8

    PhysicsWorld:展开一个可选值时意外发现nil

  9. 9

    展开一个可选值NSDefautlts时发现nil的快速问题

  10. 10

    CLLocationManager:展开一个可选值时意外找到Nil

  11. 11

    NSData:展开一个可选值时意外发现nil

  12. 12

    展开一个可选值时意外发现nil(AppleScript结果)

  13. 13

    NSJSONSerialization:展开一个可选值时意外发现nil

  14. 14

    展开一个可选值uitextfield时意外地找到nil

  15. 15

    展开一个可选IBOutlet值时为Nil

  16. 16

    UITableViewCell中的AVPlayer导致“意外发现nil,同时隐式展开一个可选值”错误

  17. 17

    在swift中解开一个optional是一个可选的,但是swift不知道它是一个可选的

  18. 18

    在回调函数 swift 上解开一个 Optional 值

  19. 19

    # 在转换之前解开一个行列表

  20. 20

    如何解开可选绑定并将值传递给另一个视图?

  21. 21

    如何解开一个List <地图>,基团通过地图键和由地图值减少

  22. 22

    Swift陀螺仪:展开一个Optional值时意外地发现nil

  23. 23

    如何在jQuery中仅解开一个父级

  24. 24

    帮助GHC在常数上解开一个整数中的Int

  25. 25

    如何在jQuery中仅解开一个父级

  26. 26

    我如何解开一个动作?我目前的方法似乎不起作用

  27. 27

    removeFromSuperView()和cells =致命错误:展开一个可选值时意外发现为零

  28. 28

    从另一个场景调用时,“在展开可选值时意外发现nil”

  29. 29

    致命错误:解开可选值(lldb)时意外发现nil

热门标签

归档