2017-06-07 1 views
0

Ich versuche, eine Entität zu einer Gruppe hinzuzufügen, aber es wird nicht beibehalten, nachdem die Anwendung geschlossen wurde. Meine Beziehung sieht wie folgt aus:Kerndatenbeziehung, die nicht besteht

enter image description here

ich eine neue Aufgabe wie folgt zu erstellen:

guard let appDelegate = 
     UIApplication.shared.delegate as? AppDelegate else { 
      return 
    } 

    // 1 
    let managedContext = 
     appDelegate.persistentContainer.viewContext 

    // 2 
    let entity = 
     NSEntityDescription.entity(forEntityName: "Task", 
            in: managedContext)! 


    let task = NSManagedObject(entity: entity, 
           insertInto: managedContext) 

    // 3 
    task.setValue(cell.taskTextField.text, forKeyPath: "name") 

    // 4 
    do { 
     try managedContext.save() 
    } catch let error as NSError { 
     print("Could not save. \(error), \(error.userInfo)") 
    } 

füge ich die Aufgabe einer Gruppe Entität wie folgt aus:

groups[0].mutableSetValue(forKey: "tasks").add(task) 

Wo Gruppen ist ein NSManagedObject-Array, dessen Wert in viewDidLoad: wie folgt geladen wird:

//1 
    guard let appDelegate = 
     UIApplication.shared.delegate as? AppDelegate else { 
      return 
    } 

    let managedContext = 
     appDelegate.persistentContainer.viewContext 

    //2 
    let fetchRequest = 
     NSFetchRequest<NSManagedObject>(entityName: "Group") 


    //3 
    do { 
     groups = try managedContext.fetch(fetchRequest) 
    } catch let error as NSError { 
     print("Could not fetch. \(error), \(error.userInfo)") 
    } 

Die Gruppen füllen ordnungsgemäß, ich habe alle Gruppen, die ich erstellt habe. Aber keine Beziehungen sind vorhanden. Dies druckt nichts:

Dieser Code druckt die Aufgaben, sofern ich die App nicht öffne und schließe. Aus irgendeinem Grund bleiben die Daten nicht bestehen, wenn die App geschlossen wird. Irgendwelche Ideen? Danke

+1

Speichern Sie den Kontext NACH dem Hinzufügen der Aufgabe zur Gruppe? Ich sehe es in Ihrem obigen Beispiel nicht. Dies muss getan werden. –

+0

Nicht verwandt, aber bewache 'AppDelegate' nicht. Gezwungen, es auszupacken. Ihre App wird nicht gestartet, wenn die Klasse fehlt. – vadian

Antwort

1

Stellen Sie sicher, dass Sie Ihren Kontext den gesamten Weg zurück in den persistenten Speicher (nicht nur den übergeordneten Kontext) speichern.

+0

Verstanden, danke! – foobar5512

Verwandte Themen