在展开可选值时

时间:2016-12-09 18:11:55

标签: json swift3

请不要回答我说我是驴子...但是我很疯狂将项目从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!)
    }

   }

奇怪的是,上面几行,我正在用另一个具有几乎相同功能的对象做同样的事情(除了我正在填充的数组),我没有遇到任何问题...... 请告诉我我在做错的地方!

1 个答案:

答案 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,但没有任何改变......