2016-03-15 145 views
0

我使用alamofire從URL下載圖像。 我正在獲取圖片onclick,但不是視圖出現時。
如何在視圖出現時獲取所有圖像?這是我使用來實現,代碼:從URL下載UITableIViewCell圖像

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) 
     } 

    } 
} 

} 

我要補充這比其他東西嗎?

回答

1

因爲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 
    } 

} 
+0

是的,我嘗試這種情況,而是當點擊細胞獲取圖像。 –

+0

@adhslock我再次更新了代碼,這個應該可以工作,我已經測試過了。 – BobGao

+0

是的,它工作。感謝您的幫助。 –

1

只需從主服務器獲取所有數據,即可在主線程中重新加載tableView

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

我看不到圖像execpt讓單擊單元格 –