2016-03-23 8 views
0

Gibt es eine Möglichkeit, Kerndaten von Xcode zu überprüfen?swift: Datensätze in Kerndaten überprüfen

Ich habe zwei Funktionen erstellt (in DB schreiben, aus DB lesen), die nicht fehlschlagen, aber lesen gibt leere Array zurück, wenn es geschriebene Daten zurückgeben soll.

Funktionen:

func writeData() { 
     appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
    context = appDel.managedObjectContext 

     let newRecord = NSEntityDescription.insertNewObjectForEntityForName("CountryList", inManagedObjectContext: context) as NSManagedObject 

     let timestamp = NSDate() 

     for geo in geoArray { 

     //geoArray - array of dictionaries ([CountryName: "Lithuania", TelCode: 370],[CountryName: "Belarus", TelCode: 375],[CountryName: "Latvia", TelCode: 371])    
     //geo - Dictionary of tipe <String: AnyObject> 
     // CoreData: countryName type is String 

     newRecord.setValue(timestamp, forKey: "dateUploaded") 
     newRecord.setValue(String(geo["CountryName"]!), forKey: "countryName") 

      do { 
       try context.save() 
       print("Saved successfully") 
      } catch _ { 
       print("there was issue saving data!") 
      } 

      } 


     } 







    func loadData(country: String) { 
     appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
     context = appDel.managedObjectContext 


     results = [AnyObject]() 

     let request = NSFetchRequest(entityName: "CountryList") 
     request.resultType = NSFetchRequestResultType.DictionaryResultType 

     request.predicate = NSPredicate(format: "countryName = %@", country) 



     let sort1 = NSSortDescriptor(key: "dateUploaded", ascending: true) 

     request.sortDescriptors = [sort1] 

     do { 
      results = try context.executeFetchRequest(request) 
      print(results!) 

     } catch _ { 
      print ("error trying to fetch!") 
     } 
    } 

Ich mag würde von Xcode überprüfen, ob es irgendwelche Aufzeichnungen in meinem Coredata Einheit sind. Ist das möglich?

dank

Antwort

0

Sie sind innerhalb der Schleife den gleichen Kern Datenobjekt tatsächlich zu verändern. Am Ende der Schleife bleibt also nur noch ein Objekt mit dem letzten Ländernamen im Array übrig. Sie sollten stattdessen immer ein newRecord innerhalb der Schleife erstellen.

Verschieben Sie diese Zeile in die for-Schleife und es sollte gut funktionieren.

let newRecord = NSEntityDescription.insertNewObjectForEntityForName("CountryList", inManagedObjectContext: context) as NSManagedObject

Beachten Sie, dass eine Kerndaten verwaltet Objekt erstellen und es in der Schleife und Speichern Ändern speichert die gleiche Objekt mehrmals. Wenn Sie mehrere Objekte speichern möchten, müssen Sie jedes Mal ein neues Objekt erstellen, seine Werte festlegen und dann speichern. Sie können auch den Speicherbereich außerhalb der Schleife verschieben.

func writeData() { 
    let appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context = appDel.managedObjectContext 
    let timestamp = NSDate() 
    for geo in geoArray { 
     let newRecord = NSEntityDescription.insertNewObjectForEntityForName("CountryList", inManagedObjectContext: context) as NSManagedObject 
     newRecord.setValue(timestamp, forKey: "dateUploaded") 
     newRecord.setValue(String(geo["CountryName"]!), forKey: "countryName") 
    } 
    do { 
     try context.save() 
     print("Saved successfully") 
    } catch _ { 
     print("there was issue saving data!") 
    } 

} 
+0

das ist, was ich zu tun versucht - zu überprüfen, ob schriftlich gut funktioniert :) Ich dachte, dass es ein Weg sein sollte – Almazini

+0

Wahrscheinlich Aufzeichnungen in CD von Xcode zu überprüfen, nicht ein guter Weg, aber was wir tun, ist manchmal protokollieren Sie den Pfad des persistenten Speichers und öffnen Sie dann dieses Fenster im Finder, um zu sehen, ob die erforderlichen CoreData-Dateien nach dem Schreiben erstellt werden. Natürlich funktioniert das nur im Simulator, aber zum Testen ist das gut genug. Sie können sehen, ob die DB korrekt geschrieben wird. Ein grober Weg, um herauszufinden, ob die DB Eigentum geschrieben wird. Sie könnten auch den Code selbst einchecken, um zu sehen, ob die Dateien da sind und eine Größe größer als Null haben. Könnten Sie den Code hinzufügen, den Sie zum Schreiben und Lesen aus der DB haben? –

+0

Ja, das würde für mich funktionieren. Mein Code ist in der Frage. Bitte prüfe! Können Sie beraten, wo Sie suchen und welche Dateien erstellt werden sollten? Danke – Almazini

Verwandte Themen