2015-12-04 99 views
0

我從我的服務器得到一個json塊,然後我繼續處理到我的託管對象中,完成後我的表視圖重新加載以顯示新內容,除了一個小問題外,這工作正常。alamofire請求完成後更新tableview

在json的處理中我得到一個圖像的URL,我使用UIImageView的擴展再次使用alamofire,這將下載的圖像寫入磁盤。

問題是圖像應該顯示在其管理對象的同一個錶行上,但會發生什麼情況是整個json的處理完成並返回到表視圖,然後保存到磁盤已完成,因此圖像會不通過。

我該如何讓tableview知道每個圖像在完成保存後就緒,因此其相關行可以更新?

擴展的UIImageView {

// 
// downloads image from supplied url and writes to disk using supplied destination path 
// 
func imageFromUrl(urlString: String, destinationPath: String) { 

    Alamofire.request(.GET, urlString).response { _, _, data, _ in 

     // only if we go data 
     if let data = data { 

      // cast to jpg image 
      let imageData = NSData(data: UIImageJPEGRepresentation(UIImage(data: data)!, 1)!) 

      // and write to disk 
      imageData.writeToFile(destinationPath, atomically: true) 
     } 
    } 
} 

}

回答

0

嘗試:

func imageFromUrl(urlString: String, destinationPath: String,handleFinishLoad:()->()) { 

    Alamofire.request(.GET, urlString).response { _, _, data, _ in 

     // only if we go data 
     if let data = data { 

      // cast to jpg image 
      let imageData = NSData(data: UIImageJPEGRepresentation(UIImage(data: data)!, 1)!) 

      // and write to disk 
      imageData.writeToFile(destinationPath, atomically: true) 
      handleFinishLoad() 
     } 
    } 
} 

和tableviewcell:

yourImageView.imageFromUrl(url, destinationPath: path) {() ->() in 
     // downloadfinish 
     // update cell ... 
    } 

UPDATE:

// in class A: DataService 
// i use static function to example. You should create a singleton for DataService and use func : singleton.getData.... 
    static func getData(handleComplete:(datas:NSArray)->()){ // get json data from server 
     // data is array with every item is your object with contain urlimage, name... or it 's nsdictionary too 
     Alamofire.request(.GET, urlString).response { _, _, data, _ in 
      let arrayReturn = NSMutableArray() 
      // parse data and add to a array or add every dictionary to array 
      handleComplete(arrayReturn) 
     } 
    } 

// in class B: yourViewController (this class contain your tableview) 
// in viewdidload 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.getData { (datas) ->() in 
      // set data for tableview 
      self.tableviewData = datas 
      // numberofrow tableview is self.tableviewData.count 
      // every cell of tableview have data is every item of self.tableviewData 
      self.tableview.reloadData() 
     } 
    } 

// in CellForRowAtIndexpath, create your cell- have uiimageview 
//  and setimage for it 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     // create cell 
     cell.imageview.imageFromUrl(url, destinationPath: path) {() ->() in 
      // downloadfinish 
      // set image for cell.imageview 
      // But it not good. You can use SDWebImage lib , set image 's url for uiimageview. it 's so easy 
     } 
     return cell 
    } 
+0

謝謝,這看起來很有希望,但一個小問題...讓我進一步解釋..sorry .. json加載是在一個類中,當它完成後,它回調到其他類,它是這第二個類重新加載tableview,並在那一點上從保存的目標路徑獲取單元映像寫入托管對象,所以alamofire塊不知道它屬於哪個單元,因爲它所做的全部操作是下載並保存到磁盤。 ..如果有道理? – Piginhat

+0

好吧,我不會解釋給你,因爲我的英語不好。但我的代碼和你......等我 –

+0

謝謝,會嘗試你的建議。可以說我完全遵循,但會嘗試讓你知道。謝謝,很快會回來的結果;-) – Piginhat