CoreData中的数据验证有问题

时间:2017-10-05 21:36:20

标签: ios swift xcode core-data

所以我试图保存0最小值和200最大值的数据 如果我在适当的范围内键入数字,它可以正常工作 但是如果我尝试键入不同的数字(例如-1或203),它就会卡在这个值上。显示警报控制器,但是当我尝试输入合法值时,它在控制台中显示前一个值(-1或203),并且只有当我输入另一个错误的数字时才会更改最后一个值(如509和警报控制器也会出现)。 我得到错误1610和1620,但我不明白如何解决这个问题。我需要确保如果用户键入错误的值然后好的一切一切正常并保存数据。

这是我保存的代码

chislo = UITextField

@IBAction func saveNote(_ sender: Any) {


    if let context = (UIApplication.shared.delegate as? AppDelegate)?.coreDataStack.persistentContainer.viewContext {

        let note = BreathingNote(context: context)

        chislo.keyboardType = .numberPad

        note.chdd = NSNumber(value: Int16(chislo.text!)!)  
        note.date = dateLabel!.text
        note.time = timeLabel!.text
        if noteAboutDrug?.text != nil {
            note.sideNote = noteAboutDrug.text
        }
        note.fullDate = (dateLabel.text! + timeLabel.text!)

        do {
            try context.save()
            print("Saving done!")
            self.dismiss(animated: true, completion: nil)
            navigationController?.popViewController(animated: true)

            dismiss(animated: true, completion: nil)
        } catch let error as NSError {
            let alertController = UIAlertController(title: "Type in two-figure number", message: "", preferredStyle: .alert)
            let cancelAction = UIAlertAction(title: "Хорошо", style: .cancel)
            alertController.addAction(cancelAction)
            present(alertController, animated: true)
            print(error, error.localizedDescription, error.userInfo)
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

saveNote功能中,您正在使用BreathingNote分配新的let note = BreathingNote(context: context)。然后,您可以在此对象上设置值并尝试保存它。如果保存失败,则提示用户更正其数据并最终再次调用saveNote,您可以使用更新的数据创建新的BreathingNote对象。

原始 BreathingNote仍在管理对象上下文中,但是,当您调用save时,Core Data会尝试保存原始注释和新注释;由于原始音符仍然存在错误数据,因此保存再次失败。您可以通过调用

删除包含错误数据的注释
context.delete(note) 

当您捕获失败的保存时;这将使用上下文中的无效数据删除对象