ios - CoreData 中的数据验证问题

标签 ios swift xcode core-data

所以我试图保存最小值为 0 、最大值为 200 的数据 如果我输入适当范围内的数字,它就可以正常工作 但如果我尝试输入不同的数字(例如 -1 或 203),它就会卡在这个值上。出现了警报 Controller ,但是当我尝试输入合法值时,它会在控制台中显示前一个值(-1 或 203),并且仅当我输入另一个错误数字(例如 509 和警报 Controller )时,最后一个值才会更改)。 我收到错误 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)
            }
        }
    }

最佳答案

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

原始内容 BreathingNote 仍然存在于托管对象上下文中,但是,当您调用 save 时,Core Data 会尝试保存原始内容注释和新的;由于原始笔记仍然存在错误数据,因此保存再次失败。您可以通过调用删除包含错误数据的注释

context.delete(note) 

当你发现失败的保存时;这将从上下文中删除具有无效数据的对象

关于ios - CoreData 中的数据验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46595153/

相关文章:

swift - 我可以将应用程序上传到使用 Xcode 10.1 和 Swift 4.2 开发的应用程序商店吗

ios - AVCapturePhotoOutput isFlashScene键值观察

swift - 在同一项目中设置 Vapor 和 Clang

iOS 模拟器总是采用相同的屏幕截图

ios - 根据段选项重新加载 TableView

objective-c - 尝试将 Objective C 完成 block 移植到 Swift 时出现问题

Swift 无法将类型的值转换为预期的参数类型

ios - HMHomeManager homes 是空的

ios - NSUserDefaults 和查询在 Mavericks Mac OSX 10.9 中不起作用

ios - Swift 5 的 UnsafeMutablePointer 警告