Swift 核心数据在现有对象确实存在时更新该对象
我创建了一个表:key,value 这只是为了保存一些参数,当键不存在时,我会进行插入,但当它存在时,我会更新值 在我的例子中,当键已经存在时,它在ma表中执行另一次插入,键等于nil: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
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