我有一个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)
}
答案 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()
}