在展开可选值 JSON 时意外发现 nil
unexpectedly found nil while unwrapping an Optional value reading JSON
人们,我不明白为什么,但是这个问题(在展开可选值时意外发现 nil)发生在这一行:
var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(数据, 选项: NSJSONReadingOptions.MutableContainers, 错误: &error) as NSDictionary
查看代码:
导入基金会
class 产品服务 {
// return a produtos Array
class func getProdutos() -> Array<Produto> {
var produtos: Array<Produto> = []
for (var i = 0; i < 10; i++) {
var p = Produto()
p.nome = "Produto \(i)"
p.desc1 = "Descrição \(i)"
p.desc2 = "Descrição \(i)"
produtos.append(p)
}
return produtos
}
// get from JSON
class func getProdutosByJson() -> Array<Produto> {
let path = NSBundle.mainBundle().pathForResource("produtos", ofType: "json")!
let data = NSData(contentsOfFile: path)
let produtos = parserJson(data!)
return produtos
}
class func parserJson(data: NSData) -> Array<Produto> {
if (data.length == 0) {
println("NSData vazio")
return []
}
var produtos: Array<Produto> = []
// read JSON and convert to Dictionary
var error: NSError?
var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
// read the structure Produtos and return a array with JSON content
var jsonProdutos: NSDictionary = dict["produtos"] as NSDictionary
var arrayProdutos: NSArray = jsonProdutos["produto"] as NSArray
// Array produtos
for obj:AnyObject in arrayProdutos {
var dict = obj as NSDictionary
var produto = Produto()
produto.nome = dict["nome"] as String
produto.desc1 = dict["desc1"] as String
produto.desc2 = dict["desc2"] as String
produtos.append(produto)
}
return produtos
}
}
JSON带有数据的对象似乎 return NIL,因为数据可能无效。
查看错误参数内容!
作为解决方案,您应该在读取数据源之前检查 JSON 数据源。使用 NSJSONSerialization.isValidJSONObject 成员函数。
人们,我不明白为什么,但是这个问题(在展开可选值时意外发现 nil)发生在这一行:
var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(数据, 选项: NSJSONReadingOptions.MutableContainers, 错误: &error) as NSDictionary
查看代码:
导入基金会
class 产品服务 {
// return a produtos Array
class func getProdutos() -> Array<Produto> {
var produtos: Array<Produto> = []
for (var i = 0; i < 10; i++) {
var p = Produto()
p.nome = "Produto \(i)"
p.desc1 = "Descrição \(i)"
p.desc2 = "Descrição \(i)"
produtos.append(p)
}
return produtos
}
// get from JSON
class func getProdutosByJson() -> Array<Produto> {
let path = NSBundle.mainBundle().pathForResource("produtos", ofType: "json")!
let data = NSData(contentsOfFile: path)
let produtos = parserJson(data!)
return produtos
}
class func parserJson(data: NSData) -> Array<Produto> {
if (data.length == 0) {
println("NSData vazio")
return []
}
var produtos: Array<Produto> = []
// read JSON and convert to Dictionary
var error: NSError?
var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
// read the structure Produtos and return a array with JSON content
var jsonProdutos: NSDictionary = dict["produtos"] as NSDictionary
var arrayProdutos: NSArray = jsonProdutos["produto"] as NSArray
// Array produtos
for obj:AnyObject in arrayProdutos {
var dict = obj as NSDictionary
var produto = Produto()
produto.nome = dict["nome"] as String
produto.desc1 = dict["desc1"] as String
produto.desc2 = dict["desc2"] as String
produtos.append(produto)
}
return produtos
}
}
JSON带有数据的对象似乎 return NIL,因为数据可能无效。 查看错误参数内容!
作为解决方案,您应该在读取数据源之前检查 JSON 数据源。使用 NSJSONSerialization.isValidJSONObject 成员函数。