从服务器加载图像

时间:2016-10-18 21:29:28

标签: ios swift3

我正在处理新闻应用程序(IOS),我尝试从服务器加载数据。加载文本数据工作正常,但在尝试加载图像时,它开始行为不端。 这是我加载图片的代码:

此方法基于数​​据创建图像:

func processImageData(data: Data?, error: Error?)-> ImageResult {
    guard
    let imageData = data,
        let image = UIImage(data: imageData) else {
            if data == nil {
                print("The image URL is empty")
                return .Failure(error!)
            }
            else {
                print("Something went wrong when creating an image")
                return .Failure(ImageError.ImageCreationError)
            }
    }
    return .Success(image)
}

然后在另一种方法中使用此方法:

func getArticleImage(article: Article) {

    let urlString = article.imageUrl
    let url = URL(fileURLWithPath: urlString)
    let request = URLRequest(url: url)
    let task = session.dataTask(with: request)
    { (data, response, error) in

        let result = self.processImageData(data: data, error: error)
        if case let .Success(image) = result {
            article.articleImage = image
        }
    }
    task.resume()
}     

在TableViewController类中,我有一个检索文章对象数组的方法,在这个方法中我调用上面的第二个方法(getArticleImage)来分别检索每个文章的图像,这是以更原始的方式完成的,所以甚至对于尚未在表格的可见区域中显示的新闻文章也下载图像。这样做是为了测试目的

 func loadNewsFeed() {
    articleStore.getNewsFeed() {
        (newsResult) in

        OperationQueue.main.addOperation({
            switch newsResult {
            case let .Success(news):
                self.articles = news
                print("Successfully found: \(news.count) news articles")
                // Retrieve image for each news article
                for article in news {
                    self.articleStore.getArticleImage(article: article)
                }

            case let .Failure(error):
                self.articles.removeAll()
                print("Error retrieving news: \(error)")
            }
            // Stop Loading Anmation
            self.removeLoadingScreen()

            // Reload data to display latest news
            self.tableView.reloadData()
        })
    }

}

但是,不显示图像。我在方法中使用了一些print语句来查看错误在哪里,方法从我上面写的三个方法中的第一个方法打印出第一个print语句:

func processImageData(data: Data?, error: Error?)-> ImageResult {
   ....
   if data == nil {
       print("The image URL is empty")
       return .Failure(error!)
   }
   ....
}

因此,考虑到每篇文章都有工作图像URL这一事实,看来根据文章图像URL创建的数据是空的,这很奇怪。所以我认为问题出在第一种方法中,即使我不确定它究竟是什么问题。

0 个答案:

没有答案