2009-12-09 58 views
0

我有一个核心数据中的“至多”关系,没有反向关系,删除规则设置为“Nullify”和“No action”(我的意思是我已经无济于事都尝试)核心数据不保存已被删除的关系

基本上我有一个MergedStation其属性变电站指向许多车站对象:MergedStation.subStation - >>站

当我打电话[mergedStation addSubStationsObject:newStation];(这是动态创建的)一切效果很好,添加了一个新站点,所有内容都被刷新并正确保存,以便下次打开该程序时,一切正常。

但是,当我呼叫[mergedStation removeSubStationsObject:stationToRemove];(也是动态创建的)时,只能为当前程序会话正确删除所有内容。如果我关闭程序并再次打开它,就像我没有改变任何东西。我有添加和删除方法后调用完全相同的方法:

[self.managedObjectContext refreshObject:station mergeChanges:YES]; 

[self.managedObjectContext processPendingChanges]; 

[self.managedObjectContext saveAndPrintErrors]; 

我也尝试了上述代码的不同组合来使其工作。任何帮助表示赞赏!

+0

您是否定义了saveAndPrintErrors?你确定保存没有错误吗?你为什么没有反向关系? – lyonanderson 2009-12-09 17:37:36

回答

4

你的意思是“只为当前程序会话正确删除”目前还不清楚。删除规则指定删除关系原点(MergedStation)时应发生的情况,而不是关系关系中断时发生的情况。删除关联不应删除任何实体实例。如果要删除子站,则必须使用-[NSManagedObjectContext deleteObject:]手动执行该操作。

另一方面,除非您有几百万个变电站(或OS X上的数十亿个),否则您应该在管理对象模型中包含反向关系。核心数据是一个对象图管理框架,当所有关系都是双向时,对象图管理效果最好(最容易)。核心数据将为你做很多繁重的工作,如果你包含逆过程。您不需要在您的代码中使用反转;如果你愿意,你可以忽略它。你付出的唯一处罚是一点记忆。直到你可以证明额外的内存使用对你的代码是有害的,你应该保持反向关系。

+0

+1包含逆。核心数据期望它。这样更好地工作。 – mmc 2009-12-21 23:25:28

1

我有这个相同的问题。他所说的“只为当前程序会话正确删除”的含义是,如果在重新启动应用程序之前检查受管理对象,它处于您希望它处于的状态(在他的情况下,SubStation对象已从关系中删除采集)。

我按照建议添加了与数据模型的反向关系,并且一切都神奇地工作。很高兴有工作,但我真的很想知道是否有解决方法,而无需支付额外的内存处罚。

0

呃。我在与此密切相关的问题上花费了太多时间。在我的情况下,我将实体添加到多对多关系中,并在重新启动应用程序后丢失这些更改。加入反向关系是解决问题的方法,但我不明白为什么。我的意思是,我明白了为什么反向关系是一件好事,但如果单向关系看起来毫无用处,它们应该是强制性的,或者至少由Core Data默认设置。

感谢上面的Erik P给我提供我需要的线索!添加那些反相关系!