保存循环删除多对多核心数据关系的一端

时间:2011-03-19 05:49:38

标签: core-data

我一直在看这个,但似乎无法破解它。它是我在CoreData中建立的第一个多对多关系,显然我有一些简单的东西......

我有一个屏幕,我维护两个不同的核心数据'实体',实体通过多对多关系相关。第一个实体以及第一个和第二个实体之间的关系在屏幕的第一个选项卡上维护,这似乎工作正常,允许我删除第一个实体实例并添加/删除第一个和第二个实体之间的关系。

我的问题出现在我维护第二个实体的第二个标签上。它们实体显示正常,我可以更新它们的属性,但是,尝试删除它们会导致永无止境的保存循环。

我相信我已经通过在第二个实体的NSManagedObject类的willSave方法中添加NSLog条目来验证循环。

实体显示在由NSArrays支持的NSTableViews中(我没有使用绑定)。 我在两个选项卡之间共享一个managedObjectContext,删除操作很简单(见下文):

int currentRow = [[tableView selectedRowIndexes] firstIndex];
NSManagedObject *targetObject = [self.array objectAtIndex:currentRow];
NSError *error = nil;
[managedObjectContext deleteObject:targetObject];
if (![managedObjectContext save:&error]) {
   NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
   abort();
}

希望有人能帮忙......

此致

斯科特

2 个答案:

答案 0 :(得分:1)

好的,所以它最终变得简单(我的错:)

我应该提到我使用的数据已经使用单独的数据加载脚本加载到生成的SQLite3文件中(我使用的是各种来源的数据)。

我添加的一些记录没有包含Z_OPT的值,而CoreData在删除这些记录时失败(然后反复尝试删除)。

一旦我填充了Z_OPT,一切正常。 我想我会让CoreData从现在开始管理对数据库的所有更改:)

再次感谢@TechZen和@ImHuntingWabbits的回复。

答案 1 :(得分:0)

此处不是很多,但请检查您的删除规则。

如果双方的多对多关系设置为delete,删除一个对象可以引发一连串删除,因为删除一个对象会触发删除所有相关对象,而这些对象又会删除他们所有相关的对象等等。

如果您已自定义willSavewillTurnIntoFault或类似方法,则可能也会在该代码中引入循环。