2017-06-27 4 views
0

ich derzeit eine plist-Datei, die 27 Erfolge Daten enthält, und ich versuche, es in die Kern-Dateneinheit als Leistung weiß eingeben, wie untenEingabe plist Daten zu Kerndaten

func createAchievements() { 

    let A:Achievement = NSEntityDescription.insertNewObject(forEntityName: "Achievement", into: CoreDatabaseContoller.getContext()) as! Achievement 

    let filePath = Bundle.main.path(forResource: "Achievement", ofType: "plist") 
    let Items = NSArray(contentsOfFile: filePath!) as! [[String:AnyObject]] 

     for item in Items { 

      A.theName = item["Name"] as! String 
      A.theDescription = item["Description"] as! String 
      A.theImage = item["Image"] as! String 
      A.aAmount = item["Amount"] as! NSNumber 
      A.aNeededAmount = item["NeededAmount"] as! NSNumber     //DOESN'T WORK IT ONLY SHOWS OR PUTS IN THE LAST ONE. 
      A.aStage = item["Stage"] as! NSNumber 
      A.aReward = item["Reward"] as! NSNumber 
      A.aHasBeenAchieved = item["HasBeenAchieved"] as! NSNumber 
      A.theSearchName = item["SearchName"] as! String 

      CoreDatabaseContoller.saveContext() 

     } 
} 

gesehen Aber wenn ich lade up the game und der achievement menu Teil des Spiels, das die Errungenschaften zeigt alle Bilder und Texte, die mit Kerndaten gefüllt werden sollen, sind nicht da und die Bilder sind rote Xs mit Ausnahme der letzten Errungenschaft im Erfolgsmenü, die zu sein scheint richtig funktioniert, wie in der Abbildung unten gesehen

enter image description here

Ich habe ursprünglich die Daten von den Errungenschaften über ein Switch-System eingegeben, das in meinem Code schrecklich aussah, wie unten zu sehen ist und es funktionierte nicht. Aber jetzt aus irgendeinem Grund, wenn ich versuche, und geben Sie es von einem plist auf Kerndaten scheint es nicht

func giveDataForAchievements zu arbeiten() {

if achievementsGenerated == false { 

     for count in 1...24 { 

      var aName = "None" 
      var aDesc = "None" 
      var aImage = "locked" 
      var aAmount:NSNumber = 0 
      var aNeededAmount:NSNumber = 1 
      var aStage:NSNumber = 0 
      var aReward:NSNumber = 0 
      var aHasbeenAchieved:NSNumber = 0 
      var aSearchName = "" 

      switch count { 

      case 1: 

       aName = "DAILY" 
       aDesc = "Daily Achievement" 
       aImage = "locked" 
       aAmount = 0 
       aNeededAmount = 1 
       aStage = 0 
       aReward = 350 
       aHasbeenAchieved = 0 
       aSearchName = "Ach0" 

      case 2: 

       aName = "DAILY" 
       aDesc = "Daily Achievement" 
       aImage = "locked" 
       aAmount = 0 
       aNeededAmount = 1 
       aStage = 0 
       aReward = 350 
       aHasbeenAchieved = 0 
       aSearchName = "Ach1" 

      case 3: 

       aName = "DAILY" 
       aDesc = "Daily Achievement" 
       aImage = "locked" 
       aAmount = 0 
       aNeededAmount = 1 
       aStage = 0 
       aReward = 350 
       aHasbeenAchieved = 0 
       aSearchName = "Ach2" 

      case 4: 

       aName = "ROOKIE" 
       aDesc = "Finish the tutorial level" 
       aImage = "locked" 
       aAmount = 0 
       aNeededAmount = 1 
       aStage = 2 
       aReward = 350 
       aHasbeenAchieved = 0 
       aSearchName = "Ach3" 


    createAchievements(aName: aName, Des: aDesc, Image: aImage, Amount: aAmount, Needed: aNeededAmount, Stage: aStage, Reward: aReward, BeenAchieved: aHasbeenAchieved, SearchName: aSearchName) 

      // all the way to 27 

Ich bin nicht sicher, wie dies zu beheben. Kann mir jemand sagen, was ich falsch mache?

Antwort

1

Sie aktualisieren dasselbe verwaltete Objekt mehrmals. Verschieben Sie die Zeile:

let A:Achievement = NSEntityDescription.insertNewObject(forEntityName: "Achievement", into: CoreDatabaseContoller.getContext()) as! Achievement 

in die for-Schleife. Es wird dann ein neues Objekt für jedes Objekt erstellt.