我创建的模型,你可以看到有: http://i.imagehost.org/0836/2009-11-08_14_37_41。 PNG

我想存储有关声音类别的信息和一些示例听起来为每个类别。 类别具有名称(的NSString)和SoundsRelation(NSData的的NSSet中,其代表的声音)。

下面的问题是: 例如,我有一些类别包含与之相关联的几种声音。假设声音的次数为3次。 所以,如果我做

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

我会看到有关名称和这三个声音信息。是这样的:

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

然后我想清楚了这个类别的声音。我想SoundsRelation设置为nil。

我做的:

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

现在,如果我做

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

我会碰到这样的:

Name = "Cat1";
SoundsRelation =     (
);

好了,似乎CAT1没有与它相关的声音。

现在我使用[managedObjectContext save:]方法和 QUIT APP

保存我managedObjectContext

当我relaund我的应用程序,并做

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

我将有:

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

我看我以前的声音!

现在,如果我重写SoundsRelation与含有5个其他声音一些其他的NSSet:     [类别的setValue:otherSetWithFiveSounds forKeyPath:@ “SoundsRelation”];

和做:     的NSLog(@ “描述:\ N%@”,类别);

我看到:     NAME = “CAT1”;     SoundsRelation =(         0x174e90,         0x174ef0,         0x174ab0,         0x1743b0,         0x1744b0     );

现在,如果我保存,退出并重新登录,NSLogging我的类别后,我看到:

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

我看到OLD SOUNDS +新的声音! 为什么?我应该怎么做才能完全覆盖旧关系,建立新的关系?

有帮助吗?

解决方案

此行:

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

不会从ManagedObjectContext取出声音。它只是打破了类别对象和声音对象之间的联系。因为它创建持久存储孤立对象CoreData不喜欢这样。当您重新启动,CoreData假设错误孤立的对象,并重新分配他们到原来的母公司。

您应该使用显式“ManagedObjectContext DeleteObject的:`命令删除的声音,你需要确保你有适当的删除规则的关系设定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top