请不要回答我说我是驴子...但是我很疯狂将项目从Swift 1.2迁移到Swift 3(我试图自己学习)。 问题是我遇到了一个我无法理解的问题:
我正在从网上读取一个JSON来检索一些类别以加载到Picker View中,但当我尝试序列化JSON时应用程序崩溃
/////////////// PICKER VIEW
func populatePicker(){
let urlCat = URL(string: "http://www.direttaweb.it/geoApp/html5/JSON_cat.php)");
let dataCat = try? Data(contentsOf: urlCat!);
var errorCat: NSError?
do {
/* HERE CRASH -> */ if let jsonObjectCat = try JSONSerialization.jsonObject(with: dataCat!, options: [] ) as? [String: AnyObject] {
// parse JSON
if let jsonObjectCat = jsonObjectCat as? [String: AnyObject] , errorCat == nil,
let jsonDataCat = JSONValue.fromObject(jsonObjectCat as AnyObject)?["data"]?.array {
for categoriaJSON in jsonDataCat {
if let categoriaJSON = categoriaJSON.array,
// 5
let categoria = Categoria.fromJSONCAT(categoriaJSON) {
categorie.append(categoria)
}
}
}
self.pickerCategorie.delegate = self
self.pickerCategorie.dataSource = self
}
}catch{
print(errorCat!)
}
}
奇怪的是,上面几行,我正在用另一个具有几乎相同功能的对象做同样的事情(除了我正在填充的数组),我没有遇到任何问题...... 请告诉我我在做错的地方!
答案 0 :(得分:0)
func populatePicker(){
let urlCat = "http://www.direttaweb.it/geoApp/html5/JSON_cat.php";
let url = URL(string: urlCat)
URLSession.shared.dataTask(with:url!) { (dataCat, response, error) in
if error != nil {
print(error ?? "errore nel json delle categorie")
} else {
do {
if let jsonObjectCat = try JSONSerialization.jsonObject(with: dataCat!, options: [] ) as? [String: AnyObject] {
// parse JSON
// 3
if let jsonObjectCat = jsonObjectCat as? [String: AnyObject] ,
// 4
let jsonDataCat = JSONValue.fromObject(jsonObjectCat as AnyObject)?["data"]?.array {
for categoriaJSON in jsonDataCat {
if let categoriaJSON = categoriaJSON.array,
// 5
let categoria = Categoria.fromJSONCAT(categoriaJSON) {
print(categoria.categoria)
self.categorie.append(categoria)
}
}
}
self.pickerCategorie.delegate = self
self.pickerCategorie.dataSource = self
}
} catch let error as NSError {
print(error)
}
}
}.resume()
}
但我遇到了另一种奇怪的行为:只有在我触摸它之后,选择器视图中的项目才会变得可见......但为什么呢? 我尝试加载viewdidappear和viewdidload,但没有任何改变......