#ios #swift #lazy-loading
#iOS #swift #отложенная загрузка
Вопрос:
Я хочу загрузить изображение асинхронно и загрузить его в UIImageView ячейки, аналогично отложенной загрузке в SWIFT.
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{
//Creating instance of class UITableViewCell
var cell : CustomTableViewCell!
//Asigning a value to a variable
num = indexPath.row
//Calling a UITableview method dequeueReusableCellWithIdentifier suing self.tableviewcustom in swift
cell = self.tableViewCustom.dequeueReusableCellWithIdentifier(cellIdentifier) as CustomTableViewCell
cell.setView()
var teamdict = DataController.sharedInstance.team.objectAtIndex(indexPath.row) as NSDictionary
cell.label.text = teamdict.valueForKey("name") as NSString
//Creating a instance of UITableview ans also as property
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,uintmax_t()),
{
let url = NSURL.URLWithString(teamdict.valueForKey("logo") as NSString)
let imgData = NSData.dataWithContentsOfURL(url, options: NSDataReadingOptions(), error: nil)
if imgData
{
let image = UIImage(data: imgData)
dispatch_sync(dispatch_get_main_queue(),
{
(self.tableViewCustom.cellForRowAtIndexPath(indexPath) as CustomTableViewCell).teamImgVw.image = image
}
)
}
})
return cell
}
я смог загрузить и отобразить изображение, когда просмотр таблицы прокручивается с нормальной скоростью, но приложение выходит из строя, когда просмотр таблицы прокручивается быстрее.
Ответ №1:
Это утверждение ( self.tableViewCustom.cellForRowAtIndexPath(indexPath)
) приведет к рекурсивному вызову метода.
dispatch_sync(dispatch_get_main_queue(),
{
(self.tableViewCustom.cellForRowAtIndexPath(indexPath) as CustomTableViewCell).teamImgVw.image = image
})
Вы пытаетесь вызвать тот же метод в этом методе.