在 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
我正在尝试使用核心数据将数据从我的第一个 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