Domanda

Ho creato modello che potete vedere ci: http://i.imagehost.org/0836/2009-11-08_14_37_41. png

Voglio memorizzare le informazioni sulle categorie di suoni e alcuni campioni suoni per ogni categoria. Categoria dispone Nome (NSString) e SoundsRelation (NSSet di NSData, che rappresenta i suoni).

Qui è il problema: Per esempio io ho qualche categoria che contiene diversi suoni ad esso associati. Assumere il numero di suoni è 3. Quindi, se faccio

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

vedrò informazioni su Nome e questi tre suoni. Qualcosa di simile a questo:

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>
);

Poi voglio chiarire questa categoria di suoni. Voglio impostare SoundsRelation a zero.

che faccio:

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

Ora, se faccio

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

avrò qualcosa di simile:

Name = "Cat1";
SoundsRelation =     (
);

Bene, sembra che Cat1 non ha suoni associati con esso.

Ora salvare il mio managedObjectContext utilizzando il metodo [managedObjectContext save:] e QUIT APP .

Quando ho relaund mia app e fare

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

avrò:

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>
);

vedo i miei suoni precedenti!

Ora, se sovrascrivo SoundsRelation con qualche altra NSSet che contiene 5 altri suoni:     [Categoria setValue: otherSetWithFiveSounds forKeyPath: @ "SoundsRelation"];

E fare:     NSLog (@ "Descrizione: \ n% @", categoria);

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

Ora, se li risparmio, chiudere e rilanciare, dopo NSLogging mia categoria vedo:

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>
);

vedo vecchie sonorità + Nuovi suoni! Perché? Cosa devo fare per ignorare completamente le relazioni vecchi ai nuovi rapporti?

È stato utile?

Soluzione

Questa riga:

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

non rimuove i suoni dal ManagedObjectContext. E 'appena rompe il legame tra l'oggetto e l'oggetto categoria suoni. CoreData non piace che perché crea oggetti orfani nella memoria permanente. Quando si riavvia, CoreData presuppone che un errore orfano gli oggetti e li riassegna al loro genitore originale.

Si dovrebbe usare l'esplicita 'ManagedObjectContext DeleteObject: comando `per rimuovere i suoni ed è necessario assicurarsi di avere la regola di eliminazione set appropriato per la relazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top