Question

J'ai créé le modèle que vous pouvez y voir: http://i.imagehost.org/0836/2009-11-08_14_37_41. PNG

Je veux stocker des informations sur les catégories sonores et certains sons échantillon pour chaque catégorie. Catégorie a Nom (NSString) et SoundsRelation (NSSet de NSData, ce qui représente des sons).

Voici le problème: Par exemple, j'ai une catégorie qui contient plusieurs sons qui lui sont associés. On suppose nombre de sons est 3. Donc, si je fais

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

Je verrai informations sur le nom et ces trois sons. Quelque chose comme ceci:

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

Ensuite, je veux effacer cette catégorie de sons. Je veux mettre SoundsRelation à zéro.

Je fais:

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

Et si je fais

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

Je vais avoir quelque chose comme:

Name = "Cat1";
SoundsRelation =     (
);

Eh bien, il semble que Cat1 ne pas les sons associés.

Maintenant, je sauve mon managedObjectContext en utilisant la méthode [managedObjectContext save:] et QUIT APP .

Quand je relaund mon application et faire

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

Je vais avoir:

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

Je vois mes précédents sons!

Maintenant, si j'Override SoundsRelation avec un autre NSSet qui contient 5 autres sons:     [Catégorie setValue: otherSetWithFiveSounds forKeyPath: @ "SoundsRelation"];

Et faire:     NSLog (@ "Description: \ n% @", catégorie);

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

Maintenant, si je sauve, arrêter de fumer et relancement, après NSLogging ma catégorie je vois:

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

Je vois VIEUX SONS + NOUVEAU SONS! Pourquoi? Que dois-je faire pour remplacer complètement les relations Jusqu''a nouvelles relations?

Était-ce utile?

La solution

Cette ligne:

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

ne supprime pas les sons de la ManagedObjectContext. Il casse tout le lien entre l'objet de la catégorie et l'objet de sons. CoreData n'aime pas parce qu'il crée des objets devenus orphelins dans le magasin persistant. Lorsque vous redémarrez, CoreData suppose qu'une erreur les objets devenus orphelins et les réaffecte à leurs parents d'origine.

Vous devez utiliser l'explicite « ManagedObjectContext deleteObject:` commande pour supprimer les sons et vous devez vous assurer que vous avez la règle de suppression appropriée pour définir la relation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top