我遇到一个涉及选项的常见错误,我有一个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")
}
当我运行我的应用时,它在我的viewDidLoad()方法中的以下代码块上的let userLoc = NSUserDefaults
行崩溃了。
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()
函数吗?
我试过它有一个错误...
任何帮助都会非常感激。我被困在这几个小时。
约什
答案 0 :(得分:4)
答案 1 :(得分:2)
如果你不确定它是否仍然if
那么用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
}
如果您确定当时不应该nil
(viewDidLoad :),您可能需要向我们提供更多代码,以便我们帮您确定哪里出错。
请记住,在打开包装之前一定要确保它不是nil
,否则请不要使用!
。
答案 2 :(得分:-2)
您必须检查在您尝试强制转换为Double的字符串中是否使用let latitude : CLLocationDegrees = Double("9,123")!
而不是let latitude : CLLocationDegrees = Double("9.123")!
。
这个抛出零错误:
if x == (1 or 2):
这是正确的方法:
if x == 1 or x == 2: