【问题标题】:this class is not key value coding-compliant for the key Project1.'此类不符合键 Project1 的键值编码。
【发布时间】:2019-10-16 00:38:12
【问题描述】:

我是 iOS 开发的新手,你能帮我解决一下你的 bug。谢谢你的提前。

未捕获的异常“NSUnknownKeyException”,原因: '[setValue:forUndefinedKey:]: 此类与键 Project1 的键值编码不兼容。'

 let  context  = appdelegate.persistentContainer.viewContext
 let proj = Project() 
        let arrProj = dic.object(forKey: "Projects") as! NSArray
        for n in 0..<arrProj.count {
            let subDic = arrProj.object(at: n) as! NSDictionary
            let item = ProjectItem(dict: subDic)
            proj.arrProjs.append( item )


           let projects = NSEntityDescription.entity(forEntityName: "Projects", in: context)
            projects?.setValue(item.Project, forKey: "project1")
            projects?.setValue(item.Project2, forKey: "project2")
            projects?.setValue(item.ID, forKey: "projectid")
            projects?.setValue(item.radius, forKey: "radius")
            projects?.setValue(item.GeofenceType, forKey: "geo_Type")
            projects?.setValue(item.Geofence, forKey: "geofence")
            projects?.setValue(item.Coordinates, forKey: "coordinates")
        }

【问题讨论】:

  • 这个错误什么时候出现?
  • 项目有 NSObject 类?
  • 谢谢您的回复,我正在使用CoreData数据库,在节省时间的同时,遇到这个问题您能帮帮我吗
  • @YogeshPatel Project 是另一个类,仍然可以正常工作,但让 projects = NSEntityDescription.entity(forEntityName: "Projects", in: context) projects?.setValue(item.Project, forKey: "project1" ) 唯一的问题
  • 请在 xib 或 storyboard 中检查您的网点,确保所有连接完美。请告诉我?

标签: swift core-data


【解决方案1】:

请使用 insertobject 查询检查这一点,您可以将数据保存在核心数据中。

    let  context  = appdelegate.persistentContainer.viewContext
    let projects = NSEntityDescription.insertNewObject(forEntityName: "Projects", into: context) as! Projects

    projects.project1 = item.Project
    projects.project2 = item.Project2
    or
    projects?.setValue(item.Project, forKey: "project1")
    projects?.setValue(item.Project2, forKey: "project2")
    projects?.setValue(item.ID, forKey: "projectid")
    projects?.setValue(item.radius, forKey: "radius")

    do{
    try context.save()
    }catch{
    print("error")
    }

【讨论】:

  • 感谢您为这个问题提供解决方案,但这个解决方案对我没有用。
  • 欢迎您,我的解决方案适用于一个实体,我认为您有一个数组,然后 rajeshkumar 的答案适用于您。如果它是单个实体,那么您不必使用设置值,您可以直接获取 projects.project1 或 project2。谢谢
【解决方案2】:

您应该在NSManagedObject 对象中设置值,而不是在NSEntityDescription 对象中

let entity = NSEntityDescription.entity(forEntityName: "Projects", in: context)
for n in 0..<arrProj.count {
    let projects = NSManagedObject(entity: entity!, insertInto: context)
    projects?.setValue(item.Project, forKey: "project1")
    projects?.setValue(item.Project2, forKey: "project2")
    //...
}

【讨论】:

  • 谢谢 RajeshKumar,它工作正常,可以为我再提供帮助,应用程序仍在崩溃线程 3:signal SIGABRT,在调用时尝试 context.save()
  • 请检查我的答案,请使用 do catch
  • @RajeshKumarR 没有显示错误,日志,每 5 分钟我发送一次请求服务器,在获取服务器后我存储在本地数据库中,第一次 ti 的工作尝试 context.save() 稍后显示错误。你能帮帮我吗
  • @user11211835 使用异常断点并找到它崩溃的地方
  • @RajeshKumarR 此错误显示错误:致命:无法从乐观锁定失败中恢复。 CoreData:错误:致命:无法从乐观锁定失败中恢复。
猜你喜欢
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
相关资源
最近更新 更多