iOS版保持URL阵列为了保存图片到一个数组时(iOS Keep url array order w

2019-10-24 13:17发布

我试图做到以下几点。
我有一个包含不同的图像多个URL的数组。 这些图像将显示为滚动视图,我想保持这种为了能够在特定的索引中删除特定的图像。
现在,我使用for循环,首先我加载与阵列NSNull对象和后来我跑环与图片更换所有的对象。 这似乎并没有真正有效的,特别是当从后台应用程序加载。

这是我的代码:

func downloadImagesfromUrlArray(){

    for var i=0;i < graphsURLlist.count; i++ {
        if let data = NSData(contentsOfURL: graphsURLlist[i]){
            let image = UIImage(data: data)
            pageImages.replaceObjectAtIndex(i, withObject: image!)
            //self.scaleImagesandScrollView()
        }else{
            NSLog("%@", i)
            var alert = myAlertController(title: nil, message: "Error trying to update the charts. Try again later \(i)",
                preferredStyle: UIAlertControllerStyle.Alert)


            alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
        }
        //Enter queue for every image to download
    }

    dispatch_group_leave(self.group)
}

有没有更好的办法来做到这一点? 谢谢

Answer 1:

你最好要异步下载图片并缓存。 图像被下载之前,它是更好地显示微调,然后用图像替换它。

下面是我的最新应用一些相关的方法:

func downloadAndCacheImg(url: String?, cell: AppCell, tableView: UITableView, indexPath: NSIndexPath) {
    if url == nil { return }

    let charactersToRemove = NSCharacterSet.alphanumericCharacterSet().invertedSet
    let cacheFilename = "".join(url!.componentsSeparatedByCharactersInSet(charactersToRemove))

    if let fullFilename = prefixFilenameWithDirectory(cacheFilename), img = UIImage(named: fullFilename) {
        cell.setAppImage(img)
        return
    }
    if let nsUrl = NSURL(string: url!) {
        NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: nsUrl), queue: NSOperationQueue.mainQueue(), completionHandler: { (response, data, error) -> Void in
            if let data = data, img = UIImage(data: data) {
                if let fullFilename = self.prefixFilenameWithDirectory(cacheFilename) {
                    data.writeToFile(fullFilename, atomically: true)
                }
                if let cell = tableView.cellForRowAtIndexPath(indexPath) as? AppCell {
                    cell.setAppImage(img)
                }
            }
        })
    }
}

func prefixFilenameWithDirectory(filename: String) -> String? {
    var dir = NSFileManager.defaultManager().URLForDirectory(.CachesDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true, error: nil)
    dir = dir?.URLByAppendingPathComponent(filename)
    return dir?.path
}


文章来源: iOS Keep url array order when saving images into an array
标签: ios swift ios8