iphone coredata 删除通过关系连接的两个实体之间的记录

Posted

技术标签:

【中文标题】iphone coredata 删除通过关系连接的两个实体之间的记录【英文标题】:iphone coredata removing records between two entities connected by relation ship 【发布时间】:2010-05-11 10:24:54 【问题描述】:

我正在我的 iphone 应用程序中实现核心数据。它有两个实体。 实体1:最新数据 Entity2:LatestDetailedData

LatestData 具有 URL、publishDate、标题 LatestDetailedData 有 URL、NewsDescription、PublishedDate、Author

两个实体具有相同的记录 URL。 两个实体都以反向关系连接。并且关系是“delete->Cascaded”

我想要的:如果我删除了LatestData中的一条记录,我希望LatestDetailedData中具有相同URL的记录也必须被删除。

怎么做?

【问题讨论】:

【参考方案1】:

如果我对您的理解正确,那么您使用的是一种关系,并且它具有相反的关系。如果是这种情况,那么当您删除一个时,Core Data 会自动删除另一个,您无需执行任何额外操作。

你看到什么表明没有发生?

更新

由于您使用多个线程,您是否每个线程使用一个NSManagedObjectContext?如果是这样,您是否在保存时更新所有线程?我怀疑这两个中的一个没有发生,因此导致了您的问题。

【讨论】:

抱歉,我之前没有更新我正在从不同线程填充不同实例的实体。当我在一个实体中删除时,在具有相同 URL 的另一个实体中重新记录不是完全删除。【参考方案2】:

当您创建实体时,您也需要创建关系

LatestDetailedData * entity2 = [[NSEntityDescription insertNewObjectForEntityForName:@"LatestDetailedData" inManagedObjectContext:context]; 
entity1.lastestdetail=entity2;

如果您只是依赖 URL 字段,那么这是不好的做法。在 coredata 中设置关系,级联删除将自行处理。

【讨论】:

但是我在不同的实例中填充了这两个实体。那么,如何在此处进一步进行。 假设您首先填充 entity1,当您填充 entity2 时,找到 enetity1(带有基于 url 的谓词)并创建关系。如果您在 coredata 知道的实体之间没有关系,则根本无法进行级联删除等操作。

以上是关于iphone coredata 删除通过关系连接的两个实体之间的记录的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 在删除 CoreData 中的对象后尝试保存新对象时应用程序崩溃

iPhone核心数据关系

CoreData 多对多关系插入和删除操作

Core Data 无法删除从未插入的对象错误

coredata 关系的删除规则

iphone, 以多对多关系保存数据, 核心数据