Frage

Ich habe Modell erstellt, die Sie dort sehen können: http://i.imagehost.org/0836/2009-11-08_14_37_41. png

Ich möchte Informationen über Sound-Kategorien speichern und einig Beispiel für jede Kategorie klingt. Kategorie hat Name (NSString) und SoundsRelation (NSSet von NSData, die Töne darstellt).

Hier ist das Problem: Zum Beispiel habe ich eine Kategorie, die mit ihm mehrere Sounds zugeordnet enthält. Es sei angenommen, Anzahl von Lauten 3 ist. Also, wenn ich

NSLog(@"description: \n%@", category);

werde ich Informationen über Namen und diese drei Töne sehen. So etwas wie folgt aus:

Name = "Cat1";
SoundsRelation =     (
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p9>,
    0x174ea0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p10>,
    0x174eb0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p11>
);

Dann möchte ich diese Kategorie von Lauten löschen. Ich möchte SoundsRelation auf Null setzen.

ich:

[category setValue:nil forKeyPath:@"SoundsRelation"];

Wenn ich aber tue

NSLog(@"description: \n%@", category);

Ich werde so etwas wie:

Name = "Cat1";
SoundsRelation =     (
);

Nun, es scheint, dass Cat1 nicht über Geräusche mit ihr verbunden sind.

Jetzt speichere ich meine managedObjectContext mit [managedObjectContext save:] Methode und ENDE APP .

Als ich relaund meine app und tun

NSLog(@"description: \n%@", category);

Ich muss:

Name = "Cat1";
SoundsRelation =     (
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p9>,
    0x174ea0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p10>,
    0x174eb0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p11>
);

Ich sehe meine vorherigen Sounds!

Nun, wenn ich SoundsRelation mit einem anderen NSSet außer Kraft setzen, die 5 andere Töne enthalten:     [Kategorie setValue: otherSetWithFiveSounds forKeyPath: @ "SoundsRelation"];

Und tun:     NSLog (@ "Beschreibung: \ n% @", Kategorie);

Ich sehe:     Name = "Cat1";     SoundsRelation = (         0x174e90,         0x174ef0,         0x174ab0,         0x1743b0,         0x1744b0     );

Wenn ich nun speichern, beenden und Relaunch nach NSLogging meiner Kategorie sehe ich:

Name = "Cat1";
SoundsRelation =     (
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p9>,
    0x174ea0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p10>,
    0x174eb0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p11>,
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p12>,
    0x174ef0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p13>,
    0x174ab0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p14>,
    0x1743b0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p15>,
    0x1744b0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p16>
);

Ich sehe ALTE SOUNDS + NEW SOUNDS! Warum? Was soll ich tun, um vollständig OLD Beziehungen zu NEW Beziehungen?

außer Kraft setzen
War es hilfreich?

Lösung

Diese Zeile:

[category setValue:nil forKeyPath:@"SoundsRelation"];

Ist die Klänge aus dem ManagedObjectContext nicht entfernen. Es bricht gerade die Verbindung zwischen der Kategorie Objekt und dem Objekt Sounds. Coredata mag das nicht, weil sie Objekte im permanenten Speicher verwaist schaffen. Beim Neustart übernimmt Coredata, dass ein Fehler die Objekte verwaiste und ordnet sie in ihre ursprünglichen Mutter.

sollten Sie verwenden den expliziten ‚ManagedObjectContext deleteObject:` Befehl die Geräusche zu entfernen und Sie müssen sicherstellen, dass Sie die entsprechende Löschregel für die Beziehung festgelegt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top