Voilà voilà, j’ai pu le coder en vitesse pour te faire un exemple:
(J’ai gardé l’exemple très simple, mais libre à toi de le compléter selon tes besoins)
Tout d’abord, j’ai créé deux classes (Team et Courses):
class Team:Object {
@objc dynamic var nom:String = ""
let courses = List<Course>() // Les courses auxquelles l'équipe à participé
}
class Course:Object {
@objc dynamic var nom:String = ""
let teams = LinkingObjects(fromType: Team.self, property: "courses") // Les équipes qui ont participés
}
Ensuite le manager de la classe Team:
class TeamManager {
static func getTeams() -> Results<Team> {
let realm = try! Realm ()
return realm.objects(Team.self)
}
}
Ensuite, voici ce que donne mon StoryBoard:
Un navigation controller pour les transitions entre les écrans, et ensuite deux TableViewController avec les cellules en mode « Basic »
(Il ne faut pas oublier de définir le nom du Segue et les identifier des cellules de tes tableView)
Ensuite, voici le code de mes TableViewController:
Mon premier TableViewController (que j’ai appelé FirstTableViewController, original, je sais
)
class FirstTableViewController: UITableViewController {
var _teams:Results<Team>?
override func viewDidLoad() {
super.viewDidLoad()
_teams = TeamManager.getTeams()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let teams = _teams else {
return 0
}
return teams.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "cellFirstVC")
if let teams = _teams {
let team:Team = teams[indexPath.row]
if let label = cell.textLabel {
label.text = team.nom
}
}
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueTeamCourse" {
if let cell = sender as? UITableViewCell {
if let indexPath = self.tableView.indexPath(for: cell),
let teams = _teams {
let selectedTeam = teams[indexPath.row]
let secondVC:SecondTableViewController = segue.destination as! SecondTableViewController
secondVC._team = selectedTeam
}
}
}
}
}
Et mon deuxième TableViewController … SecondViewController:
class SecondTableViewController: UITableViewController {
var _team:Team?
var _courses:List<Course>?
override func viewDidLoad() {
super.viewDidLoad()
if let team = _team {
_courses = team.courses
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let courses = _courses else {
return 0
}
return courses.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "cellSecondVC")
if let courses = _courses {
let course:Course = courses[indexPath.row]
if let label = cell.textLabel {
label.text = course.nom
}
}
return cell
}
}
Dans un premier temps, je te poste tout ceci tel quel pour te permettre de décortiquer, et d’avancer, mais si il y a quelque chose que tu ne comprends pas, n’hésite pas à demander, je t’y répondrai du mieux que je peux! ![:smile: :smile:](https://forum.purplegiraffe.fr/images/emoji/apple/smile.png?v=9)
(N’oublie pas de déballer les optionnels de manière un peu plus Secure)
EDIT: Je me suis rendu compte qu’il y avait plus simple, j’ai rectifier dans le code ci-dessus.
Bon après-midi,
Alexandre