更改视图上的iOS应用崩溃与慢速互联网连接

时间:2016-04-24 10:49:50

标签: ios mysql json uinavigationcontroller swift2

我有一个简单的导航控制器应用程序,它显示来自PHP服务的一个M​​ySQL查询的一些结果,该查询将结果编码为JSON。 我的问题是,当请求在一个视图控制器内部启动并且未完成时(通常具有缓慢的互联网连接,例如边缘),如果用户导航回来并且请求结束应用程序崩溃!

这是在bugged函数中调用的委托函数:

func itemsDownloaded(items: NSArray) {
    feedItems = items
    self.listTableView.reloadData()
    if(feedItems.count == 0){
        alertNoResults(self)
    }
}

这是应用程序的功能

func parseJSON() {

    var jsonResult: NSMutableArray = NSMutableArray()

    do{
        /* Parse with error control */
        if let jsonObject: AnyObject = try NSJSONSerialization.JSONObjectWithData(self.data, options:NSJSONReadingOptions.AllowFragments) {
            if let mutablearray = jsonObject as? NSMutableArray {
                /* there are results */
                jsonResult = mutablearray
            } else {
                /* there are nothing to show */
            }
        } else {
            /* parse error */
        }
        /* Parse senza controllo errori */

    } catch let error as NSError {
        print(error)

    }

    var jsonElement: NSDictionary = NSDictionary()
    let locations: NSMutableArray = NSMutableArray()

    for i in 0 ..< jsonResult.count{
        jsonElement = jsonResult[i] as! NSDictionary

        let categoria = OTestCatModel()

        //questo controllo si assicura che nessuno dei risultati abbia valore nullo
        if let id = jsonElement["id_cat"] as? String,
            let nome = jsonElement["categoria"] as? String
        {
            /* Controllo che i campi siano not null */
            if id != ""{
                categoria.id = id
            } else{
                categoria.id = "0"
            }
            if nome != ""{
                categoria.nome = nome
            }else{
                categoria.nome = "-"
            }
        }

        locations.addObject(categoria)

    }

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        /* Here is the crash */
        self.delegate.itemsDownloaded(locations)

    })
}

This is the app problem screenshot

请帮助我,我无法弄清楚这个问题!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。崩溃是由于下载速度慢导致的。当管理下载的线程已经完成下载时,委托函数试图填充列表TableView但是没有任何因为视图控制器被隐藏而没有启动因此导致崩溃。我解决了为视图控制器添加静态委托与指向视图控制器的指针,在更新表视图之前我检查了nil值。所以现在好了!