You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift开发:如何实现所有字段非空时才保存数据到Core Data

实现Core Data全字段校验后再保存的方案

你的原代码存在核心问题:即便有必填字段为空,最后依然会执行Core Data的保存操作,导致不完整的数据被存入数据库。要实现「所有字段填写完整才保存」,需要先统一完成所有必填项的合法性校验,只有全部通过后再执行实体创建、赋值和保存流程。

修改后的代码

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext

// 1. 依次校验所有必填字段,有任何一项不合法就终止流程
guard let forWhat = forWhatText.text, !forWhat.isEmpty else {
    makeAlert(titleInput: "错误", messageInput: "请填写用途!")
    return
}

guard let phoneName = phoneName.text, !phoneName.isEmpty else {
    makeAlert(titleInput: "错误", messageInput: "请填写设备名称!")
    return
}

guard let phoneNumberStr = phoneNumber.text, !phoneNumberStr.isEmpty, let phoneNumber = Int(phoneNumberStr) else {
    makeAlert(titleInput: "错误", messageInput: "请填写有效的手机号码!")
    return
}

guard let sosMessage = messageText.text, !sosMessage.isEmpty else {
    makeAlert(titleInput: "错误", messageInput: "请填写紧急消息内容!")
    return
}

guard let latitude = choosenLatitude, let longitude = choosenLongtitude else {
    makeAlert(titleInput: "错误", messageInput: "请在地图上选择你的紧急位置!")
    return
}

// 2. 所有校验通过后,创建实体并赋值
let newSOS = NSEntityDescription.insertNewObject(forEntityName: "SOS", into: context)
newSOS.setValue(forWhat, forKey: "forWhat")
newSOS.setValue(phoneName, forKey: "phoneName")
newSOS.setValue(phoneNumber, forKey: "phoneNumber")
newSOS.setValue(sosMessage, forKey: "sosMessage")
newSOS.setValue(UUID(), forKey: "id")
newSOS.setValue(latitude, forKey: "latitude")
newSOS.setValue(longitude, forKey: "longtitude")

// 3. 执行保存操作
do {
    try context.save()
    print("保存成功")
} catch {
    print("保存失败:\(error.localizedDescription)")
}

关键优化点

  • 前置集中校验:用guard语句依次检查每个必填项,一旦发现空值或格式错误,立即弹出提示并终止后续流程,从根源避免创建不完整的实体对象
  • 优化用户体验:原代码会同时弹出多个错误提示,优化后只会弹出第一个不合法字段的提示,避免信息轰炸
  • 安全类型转换:将手机号的字符串转Int操作整合到校验逻辑中,确保只有合法的数字格式才会进入保存流程

内容的提问来源于stack exchange,提问作者Yavuz Ulgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:36:00