2015-10-05 11 views
0

, поэтому я вроде как noobe для iOS и Swift также (на самом деле всего полтора месяца). Поэтому я пытаюсь сделать tableview, отображающий некоторые изображения, поступающие из Интернета, мне удалось получить правильную информацию из веб-API и отобразить их в виде таблицы. Но настольный просмотр с онлайн-изображениями, кажется, замерзнет, ​​я должен подождать 2-3 секунды, чтобы он немного переместился и снова замерзал, что очень расстраивает. Я знаю, что это как-то связано с синхронизацией, я также пробовал dispatch_async(dispatch_get_main_queue()){}, и так как я развиваюсь с помощью Swift, но не ObJ, я попробовал использовать помощника загрузки изображений с открытым исходным кодом из Github под названием Kingfisher, но это не решило мою проблему. Итак, пожалуйста, помогите мне и спасибо. Для простоты, вот демо-код:UITableView, отображающий webImages в языках Swift, кажется, замораживает

var arrays = [ 
"NPWR02174_00_013F09F4AE3D70230FA695261A8E994D275DF62333/C878A05EF327D7D42E2AF5E1EE15672A1509962C.PNG", 
"NPWR04270_00_01C53CAC0BACAC6F052AE4B968370CF9B899DDA81E/C1E1A8AD62EDE2FB95C3BD562F2783F157A0D011.PNG", 
"NPWR04472_00_01CB90FF28A2EBB55D210932F56935B377E7A28ECB/DCA2F66365777A7330F685CD8CD5F90F2FE62671.PNG", 
"NPWR04841_00_017B982A2A44BB607DECD77484C4670CCB505B65E4/91824E16D16C2789CC34A2F5F5444CD30D71C8F1.PNG", 
"NPWR05212_00_018ADD99CEA95C240EFDC92FB993F6BC8C0AF7904D/7266E29159EE69D31AA24FB94BC0E90F5306774A.PNG", 
"NPWR05254_00_015EB28BB38A5580D6A73CA0BDFB2F8C6864F85F66/76ED779ECE98E63E8A1A229AE626F62E8325D703.PNG", 
"NPWR05257_00_01CB48AFF2A9F0795B5569E1DABBC612E3FA13B79A/3524288D6B1E5B4F51CF7DEA4A3E621913A1BA8C.PNG", 
"NPWR05326_00_01DF67B968910B06FDABD8A2C2C6AAB72E0DD47048/8AB6EC3EC992C35472F02DD0C8D4122302C802E1.PNG", 
"NPWR05401_00_0188285B6025E65909B39E295D2542DF589EDCCC38/620822A98E3CFC1CFB3B5EDCF3F00B19A5B328C2.PNG", 
] 

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

    return arrays.count 

} 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = self.tableview.dequeueReusableCellWithIdentifier("gameCell")! 
    dispatch_async(dispatch_get_main_queue()){ 
     let image = cell.viewWithTag(101) as! UIImageView 

    let imageString = arrays[indexPath.row] as! String 

    let imageURL = NSURL(string: "https://trophy01.np.community.playstation.net/trophy/np/"+imageString)! 

    let data = NSData(contentsOfURL: imageURL)! 

     image.image = UIImage(data: data)} 

    return cell 

} 
+0

Попробуйте использовать alamofire https://github.com/Alamofire/Alamofire или AlamofireImage https://github.com/Alamofire/AlamofireImage – kye

+0

Я пытался использовать другой открытый проект под названием Kingfisher, это быстрый вариант SDWebImage, и он не работает, поэтому я думаю, что есть проблема с моим собственным кодом. – WhiteRice

+0

Итак, я попробовал Alamofire, и я использовал Alamofire.request (.GET, URL) .responseJSON() { (запрос, ответ, результат), чтобы получить результат JSON и успешно отобразить их в моем представлении таблицы, НО ... настольный вид все еще зависает! Я пытался попробовать КАЖДЫЕ возможные методы, может быть, есть что-то в асинхронном режиме в Alamofire, которое я не использовал? Пожалуйста, помогите мне. – WhiteRice

ответ

0

Это потому, что вы загружаете изображение синхронно. Это строка кода, которая делает это.

let data = NSData(contentsOfURL: imageURL) 

Попробуйте загрузить изображение асинхронно, а затем обновите ячейку после загрузки изображения. Оформить заказ этого ответа How to async load images on dynamic UITableView?

+0

, поэтому я изменил свой код следующим образом: dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) { let data = NSData (contentsOfURL: imageURL)! dispatch_async (dispatch_get_main_queue()) { image.image = UIImage (data: data)} } Он загружает фотографии супер быстро и не замерзает снова, но есть новая проблема, сверхурочная прокрутка, появляются новые фотографии в том же cell ... very weird – WhiteRice

+0

Вам понадобится реализовать механизм кэширования изображений, чтобы вы не повторно загрузили загруженное изображение. Для этого > создать изменяемую коллекцию (массив или словарь) > После того, как изображение загружается, добавить его в свою коллекцию и обновлять клеточного изображения > Положить «If-то еще„в“cellForRowAtIndexPath:» где ты сначала нужно проверить, если изображение уже присутствует в коллекции. Если да, то обновите изображение с помощью кэша, загрузите изображение. – Saroj

 Смежные вопросы

  • Нет связанных вопросов^_^