2017-01-10 29 views
1

我创建了一个表:key,value。核心数据在存在时更新现有对象

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

在我的情况下,当键已经存在它在马表的另一插入与关键等于零:

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) 
    } 

} 

我不明白为什么,因为它的工作以及在模拟器但不是设备...

+0

设备中可用的iOS版本? –

+0

@SagarChauhan我正在使用最新版本和旧版本的设备进行测试。9.3.2 – Ben

+0

有关您的信息,如果您的iOS版本低于10.0,则此代码永远不会执行。 '如果#available(iOS 10.0,*){ fetchRequest = Params.fetchRequest() }' –

回答

0

取代:

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

let params = results.last as! Params 

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

+0

感谢这么多,我需要什么,我找不到这个地方! – Ben