【问题标题】:retrieving a lot of data from api and use it inside UICollectionView Swift从 api 检索大量数据并在 UICollectionView Swift 中使用它
【发布时间】:2020-02-03 19:28:36
【问题描述】:

您好,我正在开发一个检索电影数据的应用程序,但我有一些问题,这是我的代码:

let categories = [MovieCategory(generID: "28", categoryTitle: "Action")
    ,MovieCategory(generID: "16", categoryTitle: "Animation")
    ,MovieCategory(generID: "35", categoryTitle: "Comedy"),
     MovieCategory(generID: "18", categoryTitle: "Drama"),
     MovieCategory(generID: "27", categoryTitle: "Horror"),
     MovieCategory(generID: "10752", categoryTitle: "War")]

func parseJson( category: MovieCategory)
{

    self.collectionView.reloadData()
    var currentCategory = category
    let parameters = ["api_key":"8460d476d21be7e26a99234d8ca8de51","sort_by":"false","include_video":"false","with_genres":category.generID]

    Alamofire.request(url, method: .get, parameters: parameters).responseJSON { (response) in
        if response.result.isSuccess{
            let movieJSON = JSON(response.result.value!)

for i in 0..<20{
        let title = movieJSON["results"][i]["title"].stringValue
        let posterPath = movieJSON["results"][i]["poster_path"].stringValue

        let overview = movieJSON["results"][i]["overview"].stringValue
        let dateReleased = movieJSON["results"][i]["release_date"].stringValue
        let voteAverage = movieJSON["results"][i]["vote_average"].stringValue
        if let safeImage = self.createImage(posterPath: posterPath)
        {
        let movieDetails = MovieDetails(movieTitle: title, poster: safeImage, voteAverage: voteAverage, overview: overview, releaseDate: dateReleased)
        currentCategory.categoryMovies.append(movieDetails)
        self.actionMovies.append(UIImage(named: "gul")!)
        self.collectionView.reloadData()
        }

            }

                                   }

        }
}

我使用两个结构作为数据源,它们是:

struct MovieCategory {
let generID:String
let categoryTitle:String
var categoryMovies:[MovieDetails] = []

} 和:

struct MovieDetails{
let movieTitle:String
let poster:UIImage
let voteAverage:String
let overview:String
let releaseDate:String

} 但是当我想在 category.categoryMovies 中获取数据时,结果是空的,我如何在 parseJson 函数中将数据附加到它我不知道为什么当调用 numberOfItemsInSection 方法时它是空的,它返回类别 [section]。 categoryMovies.count 并且它没有调用 cellForItemAtIndexpath 让我认为它是空的方法。 如果您知道解决方案,我非常感谢您的帮助。

谢谢

【问题讨论】:

  • 你能显示你的资源获取代码的sn-ps吗?
  • 您可能需要换一种方式来思考这个问题。您无法知道下载内容需要多长时间,但您确实知道下载内容的时间。您可能会发现使用 SDWebImage 或 Kingfisher 之类的工具下载图像更容易。他们有方便的方法,可以将占位符图像放入图像视图并在下载完成时替换它。
  • 如果您不想使用外部代码,那么您需要自己实现类似的东西;检查您的图像缓存以查看图像是否可用。如果没有,开始下载并传递一个闭包,当下载完成时更新图像视图
  • URLSessionDownloadDelegate 在这种情况下将是你最好的朋友。发生的情况很可能是您的视图在下载数据之前正在加载。如果您使用下载委托,您可以跟踪下载进度并在下载完成时触发视图更新。

标签: ios swift xcode api uicollectionview


【解决方案1】:

我发现解决方案只是将结构定义为类,因为它们通过引用传递值,它解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2017-02-24
    • 2020-11-20
    • 1970-01-01
    • 2020-08-02
    • 2010-11-23
    • 2020-02-05
    相关资源
    最近更新 更多