exc_bad_instruction 关于 NSJSONSerialization
exc_bad_instruction on NSJSONSerialization
我正在尝试从我的数据库中获取数据,但我的 NSJSONSerialization 上有一个 exc_bad_instruction。
func request(url:String, callback:(NSDictionary) -> ()){
let nsURL = NSURL(string: url)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
(data, response, error) in
//var error:NSError?
var response:NSDictionary
do{
response = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
callback(response)
}catch{
print("Something went wrong!")
}
}
task.resume()
}
您知道为什么它不起作用吗?只是为了让你知道一些事情,我不得不使用 do, try, catch since Swift 2 因为它之前工作得很好!
如果没有完整的错误消息,我们只能猜测确切的问题,但您应该guard
防止错误的输入数据:
func request(url:String, callback:(NSDictionary) -> ()){
let nsURL = NSURL(string: url)
guard nsURL != nil else {
print("URL not valid: \(url)")
return
}
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
(data, response, error) in
guard data != nil else {
print("dataTaskWithURL failed: \(error)")
return
}
do {
if let response = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
callback(response)
} else {
print("JSON parsing succeeded, but cast to dictionary failed")
}
} catch let parseError {
print("Something went wrong: \(parseError)")
}
}
task.resume()
}
do
-try
-catch
捕获错误,而不是异常,因此您必须自己测试有效的 URL 和有效的 NSData
。此外,避免强制解包可选值(例如 !
),尤其是当它是一个看似合理的运行时错误(例如没有网络)时。请改用可选绑定。
我正在尝试从我的数据库中获取数据,但我的 NSJSONSerialization 上有一个 exc_bad_instruction。
func request(url:String, callback:(NSDictionary) -> ()){
let nsURL = NSURL(string: url)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
(data, response, error) in
//var error:NSError?
var response:NSDictionary
do{
response = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
callback(response)
}catch{
print("Something went wrong!")
}
}
task.resume()
}
您知道为什么它不起作用吗?只是为了让你知道一些事情,我不得不使用 do, try, catch since Swift 2 因为它之前工作得很好!
如果没有完整的错误消息,我们只能猜测确切的问题,但您应该guard
防止错误的输入数据:
func request(url:String, callback:(NSDictionary) -> ()){
let nsURL = NSURL(string: url)
guard nsURL != nil else {
print("URL not valid: \(url)")
return
}
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
(data, response, error) in
guard data != nil else {
print("dataTaskWithURL failed: \(error)")
return
}
do {
if let response = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
callback(response)
} else {
print("JSON parsing succeeded, but cast to dictionary failed")
}
} catch let parseError {
print("Something went wrong: \(parseError)")
}
}
task.resume()
}
do
-try
-catch
捕获错误,而不是异常,因此您必须自己测试有效的 URL 和有效的 NSData
。此外,避免强制解包可选值(例如 !
),尤其是当它是一个看似合理的运行时错误(例如没有网络)时。请改用可选绑定。