Swift 核心数据在现有对象确实存在时更新该对象

Swift 核心数据在现有对象确实存在时更新该对象,swift,core-data,Swift,Core Data,我创建了一个表:key,value 这只是为了保存一些参数,当键不存在时,我会进行插入,但当它存在时,我会更新值 在我的例子中,当键已经存在时,它在ma表中执行另一次插入,键等于nil: public static func insertValueWithKey(context: NSManagedObjectContext, key:String, value:String){ let fetchRequest : NSFetchRequest<NSFetchRequestRe

我创建了一个表:key,value

这只是为了保存一些参数,当键不存在时,我会进行插入,但当它存在时,我会更新值

在我的例子中,当键已经存在时,它在ma表中执行另一次插入,键等于nil:

public static func insertValueWithKey(context: NSManagedObjectContext, key:String, value:String){

    let fetchRequest : NSFetchRequest<NSFetchRequestResult>

    if #available(iOS 10.0, *) {
        fetchRequest = Params.fetchRequest()
    } else {
        fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Params")
    }

    let predicate = NSPredicate(format: "key=%@", key)
    fetchRequest.predicate = predicate

    do {
        let results = try context.fetch(fetchRequest)

        if(results.count != 0){

            let paramsDescription = NSEntityDescription.entity(forEntityName: "Params", in: context)


            let params = NSManagedObject(entity: paramsDescription!, insertInto: context) as! Params


            params.value = value

            do {
                try context.save()
            } catch let error as NSError {
                print ("Error first demande insertion \(error)")
            }

        } else if (results.count == 0) {

            let params = NSEntityDescription.insertNewObject(forEntityName: "Params", into: context) as! Params

            params.key = key
            params.value = value

            context.insert(params)

            do {
                try context.save()
            } catch let error as NSError {
                print ("Error first demande insertion \(error)")
            }
        }


    } catch {
        let fetchError = error as NSError
        print(fetchError)
    }

}
public static func insertValueWithKey(上下文:NSManagedObjectContext,key:String,value:String){
let fetchRequest:NSFetchRequest
如果可用(iOS 10.0,*){
fetchRequest=Params.fetchRequest()
}否则{
fetchRequest=NSFetchRequest(entityName:“Params”)
}
let谓词=NSPredicate(格式:“key=%@”,key)
fetchRequest.predicate=谓词
做{
let results=try context.fetch(fetchRequest)
如果(results.count!=0){
让paramsDescription=NSEntityDescription.entity(forEntityName:“Params”,in:context)
让params=NSManagedObject(实体:paramsDescription!,insertInto:context)作为!params
参数值=值
做{
尝试context.save()
}将let错误捕获为NSError{
打印(“错误第一需求方插入\(错误)”)
}
}else if(results.count==0){
让params=NSEntityDescription.insertNewObject(forEntityName:“params”,into:context)作为!params
params.key=key
参数值=值
context.insert(参数)
做{
尝试context.save()
}将let错误捕获为NSError{
打印(“错误第一需求方插入\(错误)”)
}
}
}抓住{
让fetchError=错误为NSError
打印(获取错误)
}
}
我不明白为什么,因为它在模拟器上也能工作,但在设备上却不能…

更换:

    let params = NSManagedObject(entity: paramsDescription!, insertInto: context) as! Params


NSManagedObject(entity:insertInto:)
在功能上与
NSEntityDescription.insertNewObject(forEntityName:into:)

您的设备中提供了哪个版本的iOS?@SagarChauhan我正在9.3.2上使用最新版本和较旧版本的设备进行测试,如果您的iOS版本低于10.0,则不会执行此代码。”如果#可用(iOS 10.0,*){fetchRequest=Params.fetchRequest()}在10.2版本上,它不起作用,表明我们可以使它在所有版本上兼容?@SagarChauhan这已经是我所做的了…非常感谢这就是我需要的,我在任何地方都找不到它!
    let params = results.last as! Params