在使用 json API 结果和 NSDictionary 时展开可选值时意外发现 nil
Unexpectedly found nil while unwrapping an Optional value when using json API result and NSDictionary
我正在尝试使用 API 每 0.5 秒获取一次 json 数据。 API 允许每秒数千个请求,但有时当 运行 应用程序时,我会遇到此崩溃:
fatal error: unexpectedly found nil while unwrapping an Optional value
这是我用来获取 json 数据的代码。
var url : String = "URL.COM"
var request : NSMutableURLRequest = NSMutableURLRequest
request.URL = NSURL(string: url)
request.HTTPMethod = "GET"
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse?, data: NSData?, error: NSError?) -> Void in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers, error: error) as NSDictionary
谁能告诉我如何防止这种情况发生?我理解为什么数据偶尔可能为零,但我希望程序继续检查,无论它是否为零,因为它很快就会不是零。
您应该在灭菌之前添加:
if data == nil
{
println("data is nil")
return
}
问题出在数据上。它可以是 nil
,但您使用 ! 展开它,这意味着:"I know there's some data inside here, unwrap it"。问题是没有数据。
要解决它,请在 Swift:
中使用此模式
if let myData = data {
// do something using myData. If data is nil, doen't even enter here
}
完整代码:
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse?, data: NSData?, error: NSError?) -> Void in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
if let myData = data {
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(myData, options:NSJSONReadingOptions.MutableContainers, error: error) as NSDictionary
}
})
我正在尝试使用 API 每 0.5 秒获取一次 json 数据。 API 允许每秒数千个请求,但有时当 运行 应用程序时,我会遇到此崩溃:
fatal error: unexpectedly found nil while unwrapping an Optional value
这是我用来获取 json 数据的代码。
var url : String = "URL.COM"
var request : NSMutableURLRequest = NSMutableURLRequest
request.URL = NSURL(string: url)
request.HTTPMethod = "GET"
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse?, data: NSData?, error: NSError?) -> Void in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers, error: error) as NSDictionary
谁能告诉我如何防止这种情况发生?我理解为什么数据偶尔可能为零,但我希望程序继续检查,无论它是否为零,因为它很快就会不是零。
您应该在灭菌之前添加:
if data == nil
{
println("data is nil")
return
}
问题出在数据上。它可以是 nil
,但您使用 ! 展开它,这意味着:"I know there's some data inside here, unwrap it"。问题是没有数据。
要解决它,请在 Swift:
中使用此模式if let myData = data {
// do something using myData. If data is nil, doen't even enter here
}
完整代码:
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse?, data: NSData?, error: NSError?) -> Void in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
if let myData = data {
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(myData, options:NSJSONReadingOptions.MutableContainers, error: error) as NSDictionary
}
})