Swift Custom Response Serializer 随机返回图像
Posted
技术标签:
【中文标题】Swift Custom Response Serializer 随机返回图像【英文标题】:Swift Custom Response Serializer is returning images at random 【发布时间】:2014-12-19 23:35:35 【问题描述】:我目前正在使用 Alamofire 从服务器获取 Json 数据/url-images。我还使用此tutorial 创建了一个自定义响应序列化程序,以根据请求将 url 图像转换为 UIImages。
一切正常,我可以将服务器中的所有图像加载到 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)
)
【问题讨论】:
【参考方案1】:不知何故,图像以随机顺序附加,为什么?
因为异步请求或异步分派的块无法保证顺序。
您应该根据对应的页面(例如pages[i] = image
)将图像键入到字典中(顺便说一句,使用for i in 0..<pages.count ...
更容易且更传统)。
或者更好的是,仅使用 AFNetworking 的 UIImageView
类别请求图像。
【讨论】:
以上是关于Swift Custom Response Serializer 随机返回图像的主要内容,如果未能解决你的问题,请参考以下文章
Swift: 是用Custom Segue还是用Transition动画
Swift Custom Cell 创建你自己的带有标签的 Cell
ios swift custom uitablecell如何放置几个项目(标签,图片)
致命错误:在展开可选值时意外发现 nil (cellForRowAtIndexPath) (Xib Custom Cell Swift)
Swift Custom UITableViewCell 以编程方式工作并在单元格中显示,但 Storyboard IBOutlet 为 nil 并且不在单元格中显示