Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON

Posted

技术标签:

【中文标题】Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON【英文标题】:Swift 2.0 + Alamofire 3.0 - slow loading of JSONs 【发布时间】:2015-10-13 11:21:56 【问题描述】:

我有一个展示健康食谱的项目。该项目将 JSON 对象从 Alamofire 返回到 Arraylist,然后返回到 Tableview 中的 Table Cell。当我将所有对象加载到 tableview 时,它会加载......很慢。 8 秒以上。但我的目标是 3 秒。我知道问题出在 alamofire 周围,因为我检查了打印(时间戳)。我做错什么了吗?

func getCookData(urlString: String , completionHandler: (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) -> ()) -> ()



    Alamofire.request(.GET, urlString).responseJSON() 
        response in
       // var cookArray:[CookData] = []

            if response.result.isSuccess 
            let data = response.result.value

            let cookJson = JSON(data!)

            for (var i = 0; i < cookJson["data"].count; i++)

            let category = cookJson["data"][i]["kategorie"].stringValue
            let nameOfRecipe = cookJson["data"][i]["nazev"].stringValue
            let preparationTime = cookJson["data"][i]["priprava"].stringValue
            let cookingTime = cookJson["data"][i]["vareni"].stringValue
            let dificulty = cookJson["data"][i]["obtiznost"].stringValue
            let count = cookJson["data"][i]["pocet"].stringValue

            var ingredience = String()

            for var j = 0; j < cookJson["data"][i]["ingredience"].count; j++ 

                let ingredienceX = cookJson["data"][i]["ingredience"][j].stringValue

             ingredience = ingredience + "\n" +  "- " + ingredienceX

            

            let nutriInfo = cookJson["data"][i]["nutricni_informace"].stringValue
            let kcal = cookJson["data"][i]["nutricni_informace"]["Kcal"].stringValue
            let bilkoviny = cookJson["data"][i]["nutricni_informace"]["Bílkoviny"].stringValue
            let sacharidy = cookJson["data"][i]["nutricni_informace"]["Sacharidy"].stringValue
            let tukyy = cookJson["data"][i]["nutricni_informace"]["Tuky"].stringValue
            let preparationMekanism = cookJson["data"][i]["postup_pripravy"].stringValue
            let photo = cookJson["data"][i]["photos"][0].stringValue
            let thumb = cookJson["data"][i]["thumb"].stringValue

            self.printTimestamp()

            completionHandler(category, nameOfRecipe, preparationTime, cookingTime, dificulty, count, ingredience, nutriInfo, preparationMekanism, photo, thumb, kcal, bilkoviny, sacharidy, tukyy)
            

    


【问题讨论】:

如果加载很慢,说明你的网络连接很慢 :) 如果处理很慢,那是程序或硬件问题。你能更精确一点吗?模拟器类型、ios目标、你自己的mac机型…… 【参考方案1】:

所以...答案很简单,我想加载的数据太多而我做了(甚至是未使用的数据)。解决这个问题的理想方法是只获取您需要的内容,然后变得非常具体。

示例:** 我有一本食谱书。我想得到所有的食谱并观看它们。 解决方案:所以只获取所有配方的 ID 和名称并将它们存储在 array 中,然后您需要显示特定的配方,编写一个 Alamofire 方法来获取该特定的配方数据并调用它带有该配方参数的 ID。

【讨论】:

以上是关于Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON的主要内容,如果未能解决你的问题,请参考以下文章

POST 请求 Swift 3.0 Alamofire

在 Swift 3.0 (Alamofire 4.4.0) 中的一些请求后,Alamofire 停止工作

Alamofire Swift-2.0 分支因错误而失败

Alamofire 奇怪的 JSON 前缀 - Swift 2.0

Alamofire Swift 3.0 调用中的额外参数

使用 alamofire 2.0 和 Swift 2.0 的 POST 请求