gpt4 book ai didi

Swift:从 Internet 下载图像并缓存它们无法正常工作。需要建议

转载 作者:行者123 更新时间:2023-11-28 12:43:09 27 4
gpt4 key购买 nike

我是 swift 的新手,我正在构建一个从 Internet 下载图像并显示在 UICollectionView 中的应用程序,我可以成功实现此功能,但是,滚动屏幕似乎超时,它再次下载了图像再次,这可能会导致用户的大量数据。我发现我可以使用缓存来解决这个问题,但是没有用,我认为我做的一切都是对的,但数据似乎没有存储在缓存中。这是代码,谁能帮我解决这个问题?谢谢

var imageCache = [String: UIImage]()
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

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

extension ViewController: UICollectionViewDataSource {

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell

Alamofire.request(.GET, "http://localhost:8888/wordpress/wp-json/wp/v2/posts").responseJSON { (response) in
if let jsonFile = response.result.value {

var arrayOfPosts = [Posts]()

for post in jsonFile as! NSArray {

let postObj = Posts()
postObj.postThumbnailUrlString = post.valueForKeyPath("featured_image_thumbnail_url") as! String

arrayOfPosts.append(postObj)
}


let imageUrlString: String = arrayOfPosts[indexPath.row].postThumbnailUrlString

let imageUrl: NSURL = NSURL(string: imageUrlString)!







if let imageFromCache = imageCache[imageUrlString] {

cell.imageView.image = imageFromCache
return
}

let request = NSURLRequest(URL: imageUrl)
let session = NSURLSession.sharedSession()
let dataTask = session.dataTaskWithRequest(request) { (data, response, error) in

let imageToCache = UIImage(data: data!)

imageCache[imageUrlString] = imageToCache

dispatch_async(dispatch_get_main_queue(), {



cell.imageView.image = imageToCache
})

}

dataTask.resume()



}

}


return cell

}}

我还有一类 Posts 和一个自定义的 collectionviewcell。这个囤了我好久了,真心希望大家能帮我解决这个问题。谢谢!!

最佳答案

使用AlamofireImage

Swift 2.2 或 2.3

在您的 pod 文件中添加 --> pod 'AlamofireImage', '~> 2.5'。

swift 3.1

在您的 pod 文件中添加 --> pod 'AlamofireImage', '~> 3.3'。

将以下行放入您的代码中,它将自动缓存图像并同时下载它。

override func viewDidLoad() {
super.viewDidLoad()
//hit your web service here to get all url's
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return arrImageURL.count
}


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
cell.imgViewPhoto.af_setImageWithURL(arrImageURL[indexPath.row], placeholderImage: UIImage())
}

关于Swift:从 Internet 下载图像并缓存它们无法正常工作。需要建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com