현재 Alamofire를 사용하여 서버에서 Json 데이터/URL 이미지를 가져옵니다. 또한 요청시 URL 이미지를 UIImages로 변환하기 위해이 tutorial을 사용하여 사용자 지정 응답 serializer를 만들었습니다.Swift Custom Response Serializer가 임의로 이미지를 반환합니다.
모든 것이 잘 작동하며 서버의 모든 이미지를 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)
})
}
}