2012-03-27 16 views
0

Ich habe Probleme mit der Beziehung, die ich in CoreData eingerichtet habe. Es ist einer zu vielen, ein Tisch kann viele Leute haben, aber nur eine Person kann an einem Tisch sitzen.CoreData Relationship Saving

Meine App basiert auf Apple CoreDataBooks Beispiel here.

Dies funktioniert jedoch nicht mit Beziehungen. Sie sehen die 'EditingViewController.m' im Beispielprojekt, ich habe auch diese, wo der Benutzer eine Änderung an einem ausgewählten Attribut eines CoreData-Objekts editiert und speichert.

Also lassen Sie uns sagen, sie gehen und wählen Sie das Attribut name meiner Person Entität zu bearbeiten. Sie erhalten ein Textfeld, wo sie einen Namen eingeben und tippen Sie dann auf die Schaltfläche Speichern, fertig.

Jetzt hat meine Person Entität eine Beziehung mit meiner Tabellenentität, aber ich kann es nicht richtig speichern und es ist wahrscheinlich, dass ich nicht vollständig verstehe, wie es noch funktioniert. Also sagen wir, sie wählen die Tabelle dieser Person zu bearbeiten, sie erhalten eine UIPickerView, die eine Liste von Tabellen heult, großartig, ich bin soweit gekommen, ich habe eine Abrufanforderung verwendet, um die Tabellenobjekte abzurufen und sie aufzulisten.

Normalerweise ein Standard-Attributeinstellung, eine Zeile wie diese würde in meinem Code aufgerufen werden:

[editedObject setValue:textField.text forKey:editedFieldKey];

aber dieses Mal habe ich eine Beziehung bin mit so wird dies nicht funktionieren, oder?

So jetzt meine Beziehung Setup ist, versuche ich dies anstelle der oben:

[tableObject addGuestObject:(Person *)editedObject];

So von der Anfrage holen, dass ich meine Picker Ansicht gefüllt mit mir die ausgewählten Tabelle arbeiten und das Objekt erhalten , tableObject. Dann, wie das CoreDataBooks-Beispiel für mich bereits getan hat, wurde die editedObject an diese Ansicht weitergegeben und ist die betreffende Person, die wir bearbeiten.

Also das ist, wo ich es mag, es zu missverstehen. Wie bei der letzten Zeile des Codes nehmen wir einfach das vorhandene Tabellenobjekt (das ausgewählt wurde) und fügen dann das vorhandene Gastobjekt hinzu?

Aber das gibt mir diesen Fehler und Abstürze:

'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x145640 <x-coredata://2FAD62C1-382A-4398-A4CA-02B4B41DC9A5/Table/p2>''

Nicht ganz sicher, wohin sie gehen oder was dies zu tun zu beheben, ich hoffe, dass Sie meine Situation helfen kann, danke.

+0

Speichern Sie den Kontext, nachdem Sie die Person der Tabelle MO hinzugefügt haben? – timthetoolman

+0

Yup Ich spare es. –

+0

Obwohl ich denke, es stürzt ab, bevor es spart. Ich habe einen Breakpoint eingefügt und stürzt direkt nach '[tableObject addGuestObject: (Person *) editedObject] ab;' –

Antwort

0

Im Allgemeinen bedeutet der Fehler 'konnte nicht erfüllt werden', dass das Objekt aus dem persistenten Speicher gelöscht wurde und Sie trotzdem einen Verweis auf das Objekt haben. Dies könnte aus einer Reihe von Gründen geschehen (permanenter Speicher geändert, Objekt wurde von einem anderen Thread gelöscht, Objekt gehörte einem anderen Objekt mit einer Beziehung, die Kaskade hatte und wurde gelöscht). Denke, wir brauchen ein bisschen mehr Informationen über die Beziehungen daraus.

+0

Es stellte sich heraus, dass ich den falschen Kontext für verwaltete Objekte verwendet habe, den richtigen verwenden, kein Problem. –