我尝试使用异步请求从itunes api下载几个图像,我已经将图像url存储在数组上。但是当我下载图像并将其放在新阵列上时,图像顺序变得随机。
这是我的代码:
for appDict in appArray {
let songCoverUrl: String? = appDict["im:image"][0]["label"].string
let largerImageUrl = songCoverUrl!.stringByReplacingOccurrencesOfString("55x55", withString: "400x400")
if largerImageUrl.isEmpty == false {
let url : NSURL = NSURL(string: largerImageUrl)!
let request : NSURLRequest = NSURLRequest(URL: url)
NSURLSession.sharedSession().dataTaskWithRequest(request){ (imagedata:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
if error == nil {
let image : UIImage = UIImage(data: imagedata!)!
self.coverArray.append(image)
}else{
let image : UIImage = UIImage(named: "noArtworkImage.png")!
self.coverArray.append(image)
}
}.resume()
}
}
如何将图像的顺序保持为网址数组?
答案 0 :(得分:3)
您需要存储songCoverUrl对象的原始顺序。
我建议使用以下两种方法之一:预创建阵列并使用[Image?]允许未下载的nil条目,只需执行:
myArray[indexOfImagesUrlInOriginalList] = justDownloadedImage.
使用INDEX预先完成的字典沿类似的行。 [NSInteger:UIImage]并在成功下载后再次找到url的索引(使用response.request.url)
或者可能通过以下方式将imageUrl整齐地绑定到图像:
let lookup = [String : UIImage]()
look[myImageUrl] = justDownloadedImage
然后进行排序。
事实上,无论哪种方式都要求您在成功完成后检索URL,然后搜索原始项目数组以查找索引。 你可以感染创建一个查找[String:NSInteger],它是myLookup [currentUrl] = i(其中我是下载之前循环的索引)
var indexLookup = [String : Integer]()
for index,appDict in enumerate(appArray) {
let songCoverUrl: String? = appDict["im:image"][0]["label"].string
let largerImageUrl = songCoverUrl!.stringByReplacingOccurrencesOfString("55x55", withString: "400x400")
indexLookup[index] = largerImageUrl
//....
}