在 tableView 部分中将数组与核心数据分开

Separate array from core-data in tableView Sections

我正在尝试使用核心数据将数据从我的第一个 TableViewController 排序 array/names 以将数据传递到我的第二个 UITableViewController,我已经成功地实现了部分以及用户需要的每个部分的正确行数,方法是将玩家数量除以部分数量。

但是,我一直无法在每个部分连续分隔玩家阵列。无法添加模拟器的图像,所以我会尝试解释。

用户在第一个 tableView 中输入 10 个名字,然后使用步进器选择球队的数量(2 支球队),最后,他们点击球队 UIButton 将 10(# 名球员)除以2(球队数量)所以在第二个表格视图中将出现两个部分,其中有 5 个球员,但两个部分都重复前 5 个名字。

我希望第一个部分显示数组的前 5 个名字,第二个部分显示最后 5 个名字,而不是在每个部分重复前 5 个名字,无论用户每个部分有多少玩家选择。我已经被困了 4 天,尝试了循环和扩展,但我找不到让其余部分点击名称数组中间的方法,请帮忙!!谢谢。

这是我的 secondTableView 的代码,我认为问题出在我的 tableView cellForRowAt 或我的 loadedShuffledPlayers() 函数中,

注:球员来自核心数据

import UIKit
import CoreData

class TableViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    loadedShuffledPlayers()
    tableView.reloadData()
    
}

var players2 = [Players]()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var numberOfTeams = Int()

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    return players2.count / numberOfTeams

}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "shuffledNames", for: indexPath)
    cell.textLabel?.text = players2[indexPath.row].names
    return cell
}

func loadedShuffledPlayers(){
    
    let request: NSFetchRequest<Players> = Players.fetchRequest()
    do{
        players2 = try context.fetch(request).shuffled()
    }catch{
        print("Error fetching data .\(error)")
    }
    
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return numberOfTeams
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "Team # \(section + 1)"
}

}

问题就在这里

cell.textLabel?.text = players2[indexPath.row].names

您只看行号而忽略了节号。因此,对于 10 和 2 的示例,row 将始终介于 0 和 4 之间。

所以你需要做类似的事情(未测试):

let rowsPerSection = players2.count / numberOfTeams
let rowInSection = indexPath.row + rowsPerSection * indexPath.section

cell.textLabel?.text = players2[rowInSection].names