如何在swift 3分页期间在表格视图中显示所有数据?

Posted

技术标签:

【中文标题】如何在swift 3分页期间在表格视图中显示所有数据?【英文标题】:How to show all data in table view during pagination in swift 3? 【发布时间】:2017-10-07 11:40:59 【问题描述】:

这里我已经为表格视图实现了分页,并且项目是通过使用模型类加载的,但是这里加载的项目正在替换为新项目,每当它调用 api 时,它都会返回新数据,旧数据会覆盖它并显示我第一次实施时一次只有 10 个项目,谁能帮我解决这个问题?

func listCategoryDownloadJsonWithURL(listUrl: String) 
        let url = URL(string: listUrl)!
        print(listUrl)
        let task = URLSession.shared.dataTask(with: url)  (data, response, error) in
            if error != nil  print(error!); return 
            do 
                if let jsonObj = try JSONSerialization.jsonObject(with: data!) as? [String:Any] 
                    self.listClassModel = ModelClass(dict: jsonObj as [String : AnyObject])
                    DispatchQueue.main.async 
                        guard let obj = self.listClassModel else  return 
                        let itemsCount = obj.items.count
                        print(itemsCount)
                        for i in 0..<itemsCount 
                            let customAttribute = obj.items[i].customAttribute
                            for j in 0..<customAttribute.count 
                                if customAttribute[j].attributeCode == "image" 
                                    let baseUrl = "http://192.168.1.11/magento2/pub/media/catalog/product"
                                    self.listCategoryImageArray.append(baseUrl + customAttribute[j].value)
                                    print(self.listCategoryImageArray)
                                
                            
                        
                        self.activityIndicator.stopAnimating()
                        self.activityIndicator.hidesWhenStopped = true
                        self.collectionView.delegate = self
                        self.collectionView.dataSource = self
                        self.collectionView.reloadData()
                        self.collectionView.isHidden = false
                        self.tableView.reloadData()
                    
                
             catch 
                print(error)
            
        
        task.resume()
    

【问题讨论】:

【参考方案1】:

每次调用 API 时,您都将结果数据分配给模型数组。这就是您的旧数据被新数据替换的原因。您应该将新数据附加到数据源数组中,而不是分配。

 if let jsonObj = try JSONSerialization.jsonObject(with: data!) as? [String:Any] 
         self.listClassModel.append(contentsOf: ModelClass(dict: jsonObj as [String : AnyObject]))

还要确保先将数组初始化为空数组。 (可能在声明或 viewDidLoad 中)调用 API。

【讨论】:

我声明了一个空数组,如下所示,但它在提到的更改行 self.listClassModel.append(contentsOf: ModelClass(dict: jsonObj as [String : AnyObject])) 和错误是 [string:anyobject] 类型的值没有成员 append var listClassModel : [String: AnyObject] = [:] var listClassModel = [ModelClass]() 这就是数组的实例化方式。您在上面的代码中定义了一个字典。 但我也试过这样 var listClassModel = [[String:AnyObject]]() 但这里也显示错误,无法将“模型类”类型的值转换为预期的参数类型 [字符串:任何对象] 你为什么要定义你的字典类型数组?您应该将其定义为 ModelClass 的数组。 ModelClass 和字典是两种不同的类型。 如何声明告诉我兄弟我是 swift 3 的新手?

以上是关于如何在swift 3分页期间在表格视图中显示所有数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据swift 3中的集合视图高度动态增加表格视图高度?

表格视图单元格中的滚动视图将无法正确显示图像,并且在 swift 4 中的分页模式下有一个额外的页面

如何在Swift的Table View中进行分页?

Sonata Admin + 在列表视图中显示所有项目(不是每页)

Swift 3:如何在表格视图的多个部分中使用操作按钮?

如何在 Swift 中向上滚动整个表格视图?