gpt4 book ai didi

Swift 自定义响应序列化程序随机返回图像

转载 作者:行者123 更新时间:2023-11-28 05:32:04 24 4
gpt4 key购买 nike

我目前正在使用 Alamofire 从服务器获取 Json 数据/url-图像。我还使用这个 tutorial 创建了一个自定义响应序列化程序根据请求将 url 图像转换为 UIImage。

一切正常,我能够将所有图像从服务器加载到 UIImageView 中。然后,用户可以从左向右滑动,以便像查看照片库一样查看每张图片。

我遇到的问题是我的自定义响应以不同的顺序返回图像。

因此,显示的每张图片都不是按照最初开始时的正确顺序排列的。有人知道我该如何解决这个问题吗...?

我能够让它工作的唯一方法是循环遍历 0...4。但是我需要遍历整个 NSMutableArray。

var pages = NSArray()

var mutable_pages = NSMutableArray()
var pageImages: [UIImage] = []

override func viewDidLoad() {
super.viewDidLoad()

self.fetchPages()

}

func fetchPages() {
Alamofire.request(.GET, "http://www.myurl.com/api/pages.json").responseJSON() {
(_, _, data, _) in

self.pages = data!.valueForKey("page_url") as NSArray!

self.mutable_pages = NSMutableArray(array: self.pages)

###fetch json images and convert nsdata to image
###for some odd reason the order doesn't change if i do. (i < 4)
for var i = 0; i < self.mutable_pages.count; i++ {
let urlString: NSString = self.mutable_pages[i] as NSString
var imgURL: NSURL = NSURL(string: urlString)!

###So far the images are in the order that I want
Alamofire.request(.GET, imgURL).responseImage() {
(request, _, image, error) in

if error == nil && image != nil {
dispatch_async(dispatch_get_main_queue(), {

###Somehow the images get appended at a random order, why?
self.pageImages.append(image!)
})
}
}

}
}
}

自定义响应

extension Alamofire.Request {
class func imageResponseSerializer() -> Serializer {
return { request, response, data in
if data == nil {
return (nil, nil)
}

let image = UIImage(data: data!, scale: UIScreen.mainScreen().scale)

return (image, nil)
}
}

###This returns the images in a different order...
func responseImage(completionHandler: (NSURLRequest, NSHTTPURLResponse?, UIImage?, NSError?) -> Void) -> Self {
return response(serializer: Request.imageResponseSerializer(), completionHandler: { (request, response, image, error) in
completionHandler(request, response, image as? UIImage, error)
})
}
}

最佳答案

Somehow the images get appended at a random order, why?

因为不能保证异步请求或异步分派(dispatch)的 block 的顺序。

与其将图像附加到数组中,不如根据相应的页面将它们键入字典(例如 pages[i] = image )(顺便说一下,使用 for i in 0..<pages.count { ... } 更容易也更常规)。

或者更好的是,只使用 AFNetworking 的 UIImageView 按需请求图像类别。

关于Swift 自定义响应序列化程序随机返回图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575392/

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