Bonsoir à tous!
Je suis confronté à un problème dans mon app et voilà quelques jours que je me prends la tête sans trouver la solution et ça commence à me rendre fou .
Le principe est simple, il s’agit denaviguer entre plusieurs tableView en affichant un contenu sélectif :
Je crée une liste de “programmes” dont j’affiche les noms dans une première tableView.
Lorsque je sélectionne un programme dans cette première tableView, je suis dirigé vers une deuxième tableView qui affiche les noms des “Exercices” contenus dans le programme sélectionné.
Si j’avais sélectionné un autre Programme dans la première tableView, la seconde tableView aurait donc affiché une autre liste d’Exercices…
Pour cela, j’ai crée plusieurs classes pour gérer mes objets Programme et Exercice :
La base de donnée est gérée avec Realm.
import Foundation
import RealmSwift
class Exercise:Object {
@objc dynamic private var _name:String = ""
var name: String {
get {
return _name
} set {
realm?.beginWrite()
_name = newValue
try? realm?.commitWrite()
}
}
}
Puis :
import Foundation
import RealmSwift
class Programm:Object {
@objc dynamic private var _programmName:String = ""
var programmName:String {
get {
return _programmName
} set {
realm?.beginWrite()
_programmName = newValue
try? realm?.commitWrite()
}
}
}
Puis deux classes “Manager” pour la gestion dans Realm :
import Foundation
import RealmSwift
class ProgrammManager {
private var _realm:Realm
private var _programmList:Results<Programm>
init() {
_realm = try! Realm()
_programmList = _realm.objects(Programm.self)
}
func addNewProgramm(newProgrammName:String) -> Programm {
let newProgramm:Programm = Programm()
newProgramm.programmName = newProgrammName
try? _realm.write {
_realm.add(newProgramm)
print(newProgramm.programmName)
}
return newProgramm
}
func deleteProgramm(atIndex index:Int) {
if let programmToDelete:Programm = getProgramm(atIndex: index) {
try? _realm.write {
_realm.delete(programmToDelete)
}
}
}
func getProgramm(atIndex index:Int) -> Programm? {
guard index >= 0 && index < getProgrammCount() else {
return nil
}
return _programmList[index]
}
func getProgrammCount() -> Int {
return _programmList.count
}
}
Le code est similaire pour la gestion des objets “Exercices”.
Mes vues se présentent comme suit :
- Au lancement de l’app, on arrive directement sur la tableView affichant la liste des Programmes déja enregistrés, et dans la navigation bar, il y a un “+” pour ajouter un nouveau programme.
- Lorsque l’on clique sur le “+”, on est dirigé vers une vue nous demandant de saisir le nom du nouveau programme.
- Une fois cela fait, on clique sur OK (ce qui sauvegarde le nouveau programme) et on est dirigés vers la 2e tableView, dont je veux qu’elle affiche la liste des Exercices déjà enregistrés. Dans la Navigation bar, toujours un bouton “+” pour enregistrer un nouvel Exercice.
Le problème auquel je suis confronté est que lorsque je crée des exercices, ils s’affichent tous dans la même tableView, je ne parviens pas à les séparer en fonction du Programme précédemment sélectionné.
En effet, tous les objets de la classe Exercice sont stockés dans la même base de donnée Realm…
Je ne sais pas si je suis bien clair… ^^
N’hésitez pas si vous avez besoin de plus d’informations, et merci de votre aide!!
Guillaume