我正在处理新闻应用程序(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创建的数据是空的,这很奇怪。所以我认为问题出在第一种方法中,即使我不确定它究竟是什么问题。