2017-06-27 3 views
0

Je suis novice dans l'édition de données de base et j'ai du mal à la faire fonctionner. J'ai suivi l'exemple rapide de leur documentation, mais sans succès, Ci-dessous est mon code que lorsque le bouton saveButton est cliqué les nouvelles données devraient être sauvegardées dans les données de base, mais je reçois un plantage avec ce message d'erreur:La modification des données de base produit une erreur. Cette classe n'est pas une valeur-clé compatible avec la clé.

'[setValue: forUndefinedKey:]: cette classe n'est pas la valeur de la clé codage-conforme pour la clé oneWeekWeight. '

import UIKit 
    import CoreData 

class WeekStatsViewController: UIViewController { 

    var client: Client? = nil 
    var managedObjectContext: NSManagedObjectContext! 

    @IBOutlet weak var dobLabel: UILabel! 
    @IBOutlet weak var telephoneLabel: UILabel! 
    @IBOutlet weak var emailLabel: UILabel! 
    @IBOutlet weak var heightLabel: UILabel! 

    @IBOutlet weak var weightTextField: UITextField! 
    @IBOutlet weak var weekTextField: UITextField! 

    @IBOutlet weak var neckTextField: UITextField! 
    @IBOutlet weak var shouldersTextField: UITextField! 
    @IBOutlet weak var chestTextField: UITextField! 
    @IBOutlet weak var bicepTextField: UITextField! 
    @IBOutlet weak var waistTextField: UITextField! 
    @IBOutlet weak var hipsTextField: UITextField! 
    @IBOutlet weak var thighTextField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

     // Do any additional setup after loading the view. 
     navigationItem.title = client!.name 
     dobLabel.text = client!.dob 
     telephoneLabel.text = client!.telephone 
     emailLabel.text = client!.email 
     heightLabel.text = String(describing: client!.height) 
    } 

    // Dismiss keyboard when empty space tapped 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     weightTextField.endEditing(true) 
     weekTextField.endEditing(true) 
     neckTextField.endEditing(true) 
     shouldersTextField.endEditing(true) 
     chestTextField.endEditing(true) 
     bicepTextField.endEditing(true) 
     waistTextField.endEditing(true) 
     hipsTextField.endEditing(true) 
     thighTextField.endEditing(true) 
    } 

    @IBAction func saveButton(_ sender: Any) { 

     let editWeight = Double(weightTextField.text!) 
     let editWeek = weekTextField.text 
     let editNeck = neckTextField.text 
     let editShoulders = shouldersTextField.text 
     let editChest = chestTextField.text 
     let editBicep = bicepTextField.text 
     let editWaist = waistTextField.text 
     let editHips = hipsTextField.text 
     let editThigh = thighTextField.text 

     let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Client") 

     do { 
      let fetchedClients = try managedObjectContext.execute(fetchRequest) 

      fetchedClients.setValue(editWeight, forKey: "oneWeekWeight") 
      fetchedClients.setValue(editWeek, forKey: "weekOneSelected") 
      fetchedClients.setValue(editNeck, forKey: "oneWeekNeck") 
      fetchedClients.setValue(editShoulders, forKey: "oneWeekShoulders") 
      fetchedClients.setValue(editChest, forKey: "oneWeekChest") 
      fetchedClients.setValue(editBicep, forKey: "oneWeekBicep") 
      fetchedClients.setValue(editWaist, forKey: "oneWeekWaist") 
      fetchedClients.setValue(editHips, forKey: "oneWeekHips") 
      fetchedClients.setValue(editThigh, forKey: "oneWeekThigh") 

      try managedObjectContext.save() 


     } catch { 
      fatalError("Failed to fetch clients: \(error)") 
     } 

    } 

} 
+0

Veuillez vérifier votre connexion de sortie, il pourrait y avoir 2 connexions pour une étiquette. Auparavant, vous pourriez avoir donné ce nom et la référence est toujours là. –

+0

Il est définitivement mon code est incorrect :( – Elfuthark

Répondre

0

Votre fonction saveButton a cette déclaration:

let moc = self.managedObjectContext 

Ensuite, il fait des choses comme ceci:

moc?.setValue(editWeight, forKey: "oneWeekWeight") 

Sauf que NSManagedObjectContext ne possède pas une propriété nommée oneWeekWeight. Vous aurez le même problème avec toutes les autres lignes qui tentent de définir des valeurs sur le contexte, car aucune d'elles n'existera.

Si vous avez une entité qui a ces propriétés, vous devez avoir une instance de NSManagedObject qui a été créée en utilisant cette entité. Vous pouvez récupérer une instance existante ou en créer une nouvelle. Votre code ne précise pas celui que vous voulez, mais vous savez probablement si vous essayez de créer de nouvelles données ou de modifier des données existantes.

+0

Salut Tom j'ai été déconner en essayant de résoudre ce problème en attendant de l'aide et a découvert votre point exactement toutes les lignes étaient les mêmes quand j'ai commenté celui que j'ai eu l'erreur au premier tour J'essaye d'éditer des données existantes et pense que je suis confondant :) – Elfuthark

+0

On dirait que vous voulez utiliser un des résultats de votre demande d'extraction. Vous pourriez vouloir ajouter un prédicat de récupération, car il peut y avoir plus d'un résultat. –

+0

seriez-vous assez aimable pour regarder par-dessus mon code mis à jour et laissez-moi savoir où je vais mal ici, tout ce que j'ai essayé résultats dans la même erreur originale. J'apprécie vraiment si vous n'êtes pas trop occupé. Merci – Elfuthark