代码之家  ›  专栏  ›  技术社区  ›  user8977455

从2个不同的阵列加载tableview

  •  6
  • user8977455  · 技术社区  · 6 年前

    我有2个coredata阵列。一个有3个元素,另一个也有3个元素。现在,我想在tableview中加载这两个数组。因此,我的tableview中总共有6行。

    这就是我所做到的。。。

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let totalCount = (customerDetails.count) + (customerDetails2.count)
        return totalCount
    }
    

    我在 cellForRowAt...

        let customers = customerDetails[indexPath.row]   //CRASHES HERE
        for i in 0..<(customerDetails.count) {
            cell.nameLabel.text = customers.fname
            if i == customerDetails.count {
                break
            }
        }
        let customers2 = customerDetails2[indexPath.row] 
        for i in 0..<(customerDetails2.count) {
            cell.nameLabel.text = customers2.fname
            if i == customerDetails2.count {
                break
            }
        }
    

    但它在前面提到的线路上崩溃了 Index out of range 可能是因为 customerDetails 只有3行,而加载的单元格总数为6。

    在这种情况下可以做些什么。。?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Nitish    6 年前
    if indexPath.row < customerDetails.count
    {
        // load from customerDetails array
        let customer = customerDetails[indexPath.row]
    }
    else
    {
       // load from customerDetails2 array
       let customer = customerDetails2[indexPath.row - customerDetails.count]
    }
    
        2
  •  3
  •   Agent Smith    6 年前

    您可以将两者分为两个部分,而不是仅使用一个部分来创建它:

    let sections = [customerDetails,customerDetails2]
    

    在numberOfSections中,您可以提供计数:

    func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }
    

    之后,在numberOfItemsInSection中,您可以根据节号提供相应的数组:

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return sections[section].count
        }
    

    完成此操作后,您可以轻松访问并向cellForRow提供数据,如下所示:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
        let customer = sections[indexPath.section][indexPath.row]
         cell.nameLabel.text = customer.name
    }
    

    希望有帮助!!

        3
  •  0
  •   Shehata Gamal    6 年前

    将cellforRow中的代码更改为此,注意

     let arr1Count = customerDetails.count
    
      if(indexPath.row < = arr1Count )
     {
         let customers = customerDetails[indexPath.row]
          cell.nameLabel.text = customers.fname
     }
    else
    
    {
         let customers = customerDetails2[indexPath.row - arr1Count]
          cell.nameLabel.text = customers.fname
    
     }