Core data 核心数据关系删除规则-无效+;大量

Core data 核心数据关系删除规则-无效+;大量,core-data,ios5,Core Data,Ios5,实体: 录像带 播放列表项 播放列表 关系: 视频对于许多播放列表项是可选的,删除规则为nullify 播放列表是多对至少一个播放列表项目,删除规则为空 对于视频,播放列表项必须为1,并且删除规则为nullify 播放列表的播放列表项必须为1,删除规则为nullify 在Playlist实体中,我没有公开playlitem关系/设置。相反,我有一个称为“videos”的暂时未定义属性,它是通过对播放列表项集进行排序而生成的视频实体数组。播放列表和视频实体之间没有关系 在托管对象上下文中保

实体:

  • 录像带
  • 播放列表项
  • 播放列表
关系:

  • 视频对于许多播放列表项是可选的,删除规则为nullify
  • 播放列表是多对至少一个播放列表项目,删除规则为空
  • 对于视频,播放列表项必须为1,并且删除规则为nullify
  • 播放列表的播放列表项必须为1,删除规则为nullify
在Playlist实体中,我没有公开playlitem关系/设置。相反,我有一个称为“videos”的暂时未定义属性,它是通过对播放列表项集进行排序而生成的视频实体数组。播放列表和视频实体之间没有关系

在托管对象上下文中保存修改的播放列表实例时出现问题

从playlist.m(NSManagedObject子类):

编辑:不,手动取消关系在所有情况下都不起作用。(也许这并不奇怪?)

在播放列表实体上,我没有公开播放项关系/设置。相反,我有一个称为“videos”的暂时未定义属性,它是通过对播放列表项集进行排序而生成的视频数组

也许这就是问题所在。不清楚您如何命名与
视频的关系。如果关系和瞬态属性都被命名为
videos
,那么肯定会有问题。为什么不在
播放列表
的h文件中正常声明
视频
关系,以及(而不是)您的声明(例如,
视频剪辑
(瞬态数组)


此外,请确保模型中明确哪些关系是彼此相反的。

如果删除块后的[[self-managedObjectContext]processPendingChanges]将为您解决奇怪的消息,请尝试

在某些情况下,当您在同一运行循环周期中继续更改托管对象上下文,并且某些涉及的对象与已删除的对象有关系时,核心数据似乎会变得混乱

问候,


sven.

-processPendingChanges
对我不起作用。所做的工作是在我的NSManagedObject子类中实现
-prepareForDeletion
,并手动从有问题的多对多关系中删除要删除的对象:

- (void)prepareForDeletion {
    [[[self owningEntity] mutableSetValueForKey:@"ownedEntities"] removeObject:self];
}

我已经三次检查了我的数据模型,看起来还可以。我不知道为什么会产生这个错误。但这似乎至少让它消失了。

使用performBlock为我修复了它:

[context performBlock:^{

// delete objects

// save context

}];

播放列表和视频之间没有关系。视频数组是根据播放列表到播放列表项目的关系生成的。我改变了措辞,使之更清楚。我只是在自己的代码中遇到了这个问题。对象删除后调用-processingPendingChanges使核心数据安静下来。我也面临同样的问题。但在添加上述方法后并没有改变,问题仍然是一样的:我也面临同样的问题。但添加上述方法后无变化,仍然发布不变:
for (FHPlaylistItem *pi in *playlistItems) {
    [pi setVideo:nil];
    [pi setPlaylist:nil];
    [context deleteObject:pi];
}
- (void)prepareForDeletion {
    [[[self owningEntity] mutableSetValueForKey:@"ownedEntities"] removeObject:self];
}
[context performBlock:^{

// delete objects

// save context

}];