[Résolu] Sauvegarde nouvel enregistrement coreData dans succession de Controllers
Bonjour à tous,
je viens ici car j'ai un problème sérieux que je n'arrive pas à résoudre.
Certainement à cause d'une maà®trise imparfait du core Data.
1a- En gros, je click dans ma tableView, je suis donc en édition de la fiche, puis je la modifie - enregistrement = OK.
1b- Dans le même cas, si je passe sur l'écran suivant et que je le modifie, pas de pb - enregistrement = OK
2a- Dans le cas, d'une nouvelle fiche, je la crée, elle s'enregistre bien - enregistrement = OK
2b- Mais, lorsque le passe dans l'écran suivant et que je le modifie, les problèmes apparaissent. Pas d'enregistrement, voire bugs (dans mes tests), parfois.
Les codes en question :
1a-
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
if let indexPath = self.listePatients.indexPathForSelectedRow() {
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject
let nom = object.valueForKey("nom") as String
listeDesVariables.edition = true
listeDesVariables.existingItem = object
Le existingItem, c'est pour l'update de la même fiche.
La fiche s'affiche avec les bons champs, puis si je les modifie, - enregistrement = OK
if listeDesVariables.edition == true {
let entity = NSEntityDescription.entityForName("Patients", inManagedObjectContext: context)
listeDesVariables.existingItem.setValue(nomTextField.text, forKey: "nom")
1b- idem car je suis en update - if listeDesVariables.existingItem != nil {
2a - ok
let entity = NSEntityDescription.entityForName("Patients", inManagedObjectContext: context)
var newUser = Patients(entity: entity!, insertIntoManagedObjectContext: context)
newUser.nom = nomTextField.text
etc
2b- le problème, c'est que je ne parviens pas à faire un update sur le bonne fiche, car on n'est pas dans le cas de l'édition, et donc on n'a pas listeDesVariables.existingItem
Et donc je bosse sur le newUser
if listeDesVariables.newUserHashValue != 0 {
var newUser = Patients(entity: entity!, insertIntoManagedObjectContext: context)
println("newUser.hashValue = \(newUser.hashValue)")
println("listeDesVariables.newUserHashValue = \(listeDesVariables.newUserHashValue)")
if newUser.hashValue == listeDesVariables.newUserHashValue {
newUser.e1L1Regard = champRegard.text
newUser.e1L1Sourire = champSourire.text
}
}
Mais les hashValue sont différents, normal je crée un nouveau patients newUser.
En gros, sir je passe par l'édition d'une fiche et que je crée une nouvelle fiche le existingItem n'est pas nil, et cela n'est pas lui que je vise mais le newUser de l'étape précédente, et comment la cibler ?
Bon, je pense que mon post est un peu bordel, mais je pense que vous comprendrez, sinon, je suis prêt à répondre aux questions.
Merci d'avance.
Réponses
ça fait peur, ou on n'y comprend rien, donc que je m'exprime mal ?
Je n'ai jamais touché à Core Data. D'un autre coté, je n'en ai pas besoin pour l'application que je développe ..
J'avoue que je ne comprend pas trop:).
ça me parait simple, si ton entité existe tu fait une modification ensuite tu enregistre en base, si elle existe pas tu crée une nouvelle et tu l'enregistre .