如何逐个加载存储在数组中的多个URL中的JSON数据?

时间:2016-03-16 17:18:23

标签: ios json swift

我有一个url数组(由用户选择),我想从中逐个加载JSON数据并填充UITableView。以下是我使用的代码,但它似乎不起作用。任何人都可以为我提供解决方案吗?

     while (i < fbPagesURLS.count)
    {

        let newUrl = NSURL(string: fbPagesURLS[i])!
        let task = NSURLSession.sharedSession().dataTaskWithURL(newUrl, completionHandler: { (data, response, error) -> Void in

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                if error == nil
                {
                    print(data)
                    print("----------------------------")
                    i++;
                }

            })
        })
        task.resume()
    }

它不起作用,所以肯定是错的。如果有人可以指出我的错误,我会很感激。 谢谢!

编辑:据我所知,我写了一个递归函数。它正在运行但并非所有JSON都在显示。我不明白什么是错的。

    func loader(let i : Int, var array : [String])
{
    if i < array.count
    {
        let url = NSURL(string: array[i])
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                if error == nil
                {
                    do
                    {
                        let jsondata = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
                        print(jsondata)
                        print("--------------------------")


                    }
                    catch
                    {

                    }
                }

            })


        })
        task.resume()
        self.loader(i+1, array: array)
    }
    else
    {
        return
    }
}

编辑2: 感谢所有宝贵的意见,伙计们,我修好了! 我在dispatch_async()中附上了函数调用,现在它工作正常。 这是更新的代码:

    fbFeedMessages.removeAll()

    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        self.loader(fbPagesURLS)

    }

1 个答案:

答案 0 :(得分:0)

尝试这样,将您的网址分配给fbPagesURLS并调用loadData方法

var currentItem = 0
    func loadData()
    {
        if fbPagesURLS.count > currentItem
        {
            currentItem++
        }else{
            return
        }
        let task = NSURLSession.sharedSession().dataTaskWithURL(fbPagesURLS[currentItem], completionHandler: { (data, response, error) -> Void in

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                if error == nil
                {
                    print(data)
                    print("----------------------------")
                    self.loadData()
                }
            })
        })
        task.resume()
    }