从2个不同的数组加载tableview

时间:2018-02-12 14:12:37

标签: ios swift uitableview core-data

我有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 个答案:

答案 0 :(得分:1)

将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

 }

答案 1 :(得分:1)

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 :(得分:1)

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

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
}

希望它有所帮助!!