2017-01-10 10 views
1

Ich habe eine Tabelle erstellt: Schlüssel, Wert.Kerndaten aktualisieren ein vorhandenes Objekt, wenn es existiert

Es ist nur für das Speichern einiger Parameter, wenn der Schlüssel nicht existiert, mache ich eine Einfügung, aber wenn es existiert, aktualisiere ich den Wert.

In meinem Fall, wenn der Schlüssel bereits vorhanden Motor hat einen weiteren Einsatz in ma Tabelle mit Schlüssel gleich Null:

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

} 

Ich verstehe nicht, warum, weil es auch auf Simulator arbeiten, aber nicht auf Gerät ...

+0

Welche Version von iOS auf Ihrem Gerät verfügbar? –

+0

@SagarChauhan Ich teste auf einem Gerät mit der letzten Version und einem älteren auf 9.3.2 – Ben

+0

Zu Ihrer Information, diesen Code nie ausführen, wenn Ihre iOS-Version in weniger als 10.0. 'if #available (iOS 10.0, *) { fetchRequest = Params.fetchRequest() }' –

Antwort

0

ersetzen:

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

mit

let params = results.last as! Params 

NSManagedObject(entity: insertInto:) ist funktionell das gleiche wie NSEntityDescription.insertNewObject(forEntityName:into:)

+0

DANKE, SO BRAUCHE ICH NUR, ich kann das nirgendwo finden! – Ben

Verwandte Themen