Ios UITableIViewCell图像从URL下载

Ios UITableIViewCell图像从URL下载,ios,swift,uitableview,alamofire,sdwebimage,Ios,Swift,Uitableview,Alamofire,Sdwebimage,我正在使用alamofire从URL下载图像。 我会在单击时获得图像,但不会在视图出现时获得图像。 如何在显示视图时获取所有图像?这是我用来实现以下目标的代码: import UIKit import Alamofire import SwiftyJSON import SDWebImage import Kingfisher class Paragogoi: UITableViewController { var data=[FronItem]() override func vie

我正在使用alamofire从URL下载图像。 我会在单击时获得图像,但不会在视图出现时获得图像。
如何在显示视图时获取所有图像?这是我用来实现以下目标的代码:

import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import Kingfisher

class Paragogoi: UITableViewController {
var data=[FronItem]()   

override func viewDidLoad() {
    super.viewDidLoad()

    Alamofire.request(.GET, "http://gaiaskarpos.com/getCategores.php").validate().responseJSON { response in
        switch response.result {
        case .Success:
            if let value = response.result.value 
            {
                let json = JSON(value)

                let list: Array<JSON> = json.arrayValue
                var urls=[String]()

                for element in list{
                    let id:String=element["id"].stringValue
                    let name:String=element["name"].stringValue
                    let url:String=element["url"].stringValue
                     self.data.append(FronItem(id:id,name:name,url:url))

                };
                self.tableView.reloadData() 

            }
        case .Failure(let error):
            print(error)
        }
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return data.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("paragogosCell", forIndexPath: indexPath)

    cell.textLabel?.text = data[indexPath.row].name

    asycloadp(data[indexPath.row].url!, imageView: cell.imageView!)


    return cell
}

func asycloadp(url:String,imageView:UIImageView){
    let downloadQueue=dispatch_queue_create("myqueue", nil)

    print(url)
    dispatch_async(downloadQueue){
        let imageUrl:NSURL?
        = NSURL(string:url)
        dispatch_async(dispatch_get_main_queue()){
        imageView.sd_setImageWithURL(imageUrl)
        }

    }
}

}
导入UIKit
进口阿拉莫菲尔
导入快捷JSON
导入SDWebImage
进口翠鸟
类Paragogoi:UITableViewController{
变量数据=[FronItem]()
重写func viewDidLoad(){
super.viewDidLoad()
请求(.GET,“http://gaiaskarpos.com/getCategores.php“”.validate().responseJSON{response in
开关响应。结果{
成功案例:
如果let value=response.result.value
{
让json=json(值)
let list:Array=json.arrayValue
变量URL=[String]()
对于列表中的元素{
let id:String=element[“id”]。stringValue
let name:String=element[“name”]。stringValue
让url:String=element[“url”]。stringValue
self.data.append(FronItem(id:id,name:name,url:url))
};
self.tableView.reloadData()
}
案例。失败(let错误):
打印(错误)
}
}
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回数据.count
}
重写func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell=tableView.dequeueReusableCellWithIdentifier(“paragogosCell”,forIndexPath:indexPath)
cell.textlab?.text=data[indexath.row].name
asycloadp(数据[indexath.row].url!,imageView:cell.imageView!)
返回单元
}
func asycloadp(url:String,imageView:UIImageView){
让downloadQueue=dispatch\u queue\u create(“myqueue”,nil)
打印(url)
调度异步(下载队列){
让imageUrl:NSURL?
=NSURL(字符串:url)
dispatch\u async(dispatch\u get\u main\u queue()){
imageView.sd_setImageWithURL(imageUrl)
}
}
}
}

我应该添加除此之外的任何内容吗?

从服务器获取所有数据后,只需在主线程中重新加载
表格视图

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadData()
}

从服务器获取所有数据后,只需在主线程中重新加载
tableView

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadData()
}

因为dispatch_async是异步传输,所以在下载映像后必须刷新表视图,但我看到您使用的是SDWebImage,所以不需要函数asycloadp,请更改代码并重试

import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import Kingfisher

class Paragogoi: UITableViewController {
    var data=[FronItem]()

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, "http://gaiaskarpos.com/getCategores.php").validate().responseJSON { response in
            switch response.result {
            case .Success:
                if let value = response.result.value {
                    let json = JSON(value)

                    let list: Array<JSON> = json.arrayValue
                    var urls=[String]()

                    for element in list{
                        let id:String=element["id"].stringValue
                        let name:String=element["name"].stringValue
                        let url:String=element["url"].stringValue
                        self.data.append(FronItem(id:id,name:name,url:url))

                    };
                    self.tableView.reloadData()

                }
            case .Failure(let error):
                print(error)
            }
        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return data.count
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("paragogosCell", forIndexPath: indexPath)

        cell.textLabel?.text = data[indexPath.row].name

        let imageUrl:NSURL? = NSURL(string:url)
        cell.imageView!.sd_setImageWithURL(imageUrl,  completed:{(image: UIImage?, error: NSError?, cacheType: SDImageCacheType!, imageURL: NSURL?) in
            if (image != nil) {
                tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
            }
        })

        return cell
    }

}
导入UIKit
进口阿拉莫菲尔
导入快捷JSON
导入SDWebImage
进口翠鸟
类Paragogoi:UITableViewController{
变量数据=[FronItem]()
重写func viewDidLoad(){
super.viewDidLoad()
请求(.GET,“http://gaiaskarpos.com/getCategores.php“”.validate().responseJSON{response in
开关响应。结果{
成功案例:
如果let value=response.result.value{
让json=json(值)
let list:Array=json.arrayValue
变量URL=[String]()
对于列表中的元素{
let id:String=element[“id”]。stringValue
let name:String=element[“name”]。stringValue
让url:String=element[“url”]。stringValue
self.data.append(FronItem(id:id,name:name,url:url))
};
self.tableView.reloadData()
}
案例。失败(let错误):
打印(错误)
}
}
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回数据.count
}
重写func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell=tableView.dequeueReusableCellWithIdentifier(“paragogosCell”,forIndexPath:indexPath)
cell.textlab?.text=data[indexath.row].name
让imageUrl:NSURL?=NSURL(字符串:url)
cell.imageView!.sd_setImageWithURL(imageUrl,已完成:{(图像:UIImage?,错误:NSError?,缓存类型:SDImageCacheType!,图像URL:NSURL?)在中
如果(图像!=nil){
tableView.reloadRowsAtIndexPaths([indexPath],withRowAnimation:.None)
}
})
返回单元
}
}

因为dispatch\u async是异步传输,所以在下载映像后必须刷新表视图,但我发现您使用的是SDWebImage,因此不需要函数asycloadp,请更改代码,然后重试

import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import Kingfisher

class Paragogoi: UITableViewController {
    var data=[FronItem]()

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, "http://gaiaskarpos.com/getCategores.php").validate().responseJSON { response in
            switch response.result {
            case .Success:
                if let value = response.result.value {
                    let json = JSON(value)

                    let list: Array<JSON> = json.arrayValue
                    var urls=[String]()

                    for element in list{
                        let id:String=element["id"].stringValue
                        let name:String=element["name"].stringValue
                        let url:String=element["url"].stringValue
                        self.data.append(FronItem(id:id,name:name,url:url))

                    };
                    self.tableView.reloadData()

                }
            case .Failure(let error):
                print(error)
            }
        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return data.count
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("paragogosCell", forIndexPath: indexPath)

        cell.textLabel?.text = data[indexPath.row].name

        let imageUrl:NSURL? = NSURL(string:url)
        cell.imageView!.sd_setImageWithURL(imageUrl,  completed:{(image: UIImage?, error: NSError?, cacheType: SDImageCacheType!, imageURL: NSURL?) in
            if (image != nil) {
                tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
            }
        })

        return cell
    }

}
导入UIKit
进口阿拉莫菲尔
导入快捷JSON
导入SDWebImage
进口翠鸟
类Paragogoi:UITableViewController{
变量数据=[FronItem]()
重写func viewDidLoad(){
super.viewDidLoad()
请求(.GET,“http://gaiaskarpos.com/getCategores.php“”.validate().responseJSON{response in
开关响应。结果{
成功案例:
如果let value=response.result.value{
让json=json(值)
let list:Array=json.arrayValue
变量URL=[String]()
对于列表中的元素{
let id:String=element[“id”]。stringValue
let name:String=element[“name”]。stringValue
让url:String=element[“url”]。stringValue
self.data.append(FronItem(id:id,name:name,url:url))
};
self.tableView.reloadData()
}
案例。失败(let错误):