核心数据关系无法正常运作

时间:2013-04-09 09:44:52

标签: core-data relationship nsmanagedobject nsmanagedobjectcontext

这是coredata架构的结构。 enter image description here

在向“艺术家”添加条目后,将它们用于新添加的“相册”条目是完美的。

enter image description here

但问题如图2和图2所示。 3,将'michael jackson'分配给'Insomniac 2010'专辑&然后将同一位艺术家添加到'Baby ft ludacris'中,失去了专辑'Insomniac'中的参考。

这是我在 AlbumDetailViewController.h

中保存上下文的代码
- (void)EntityRecordstableview:(UITableView *)tableView didselectrowatindexpath:(NSIndexPath *)indexPath forentity:(id)entity
{
    Artist *selectedArtist = entity;

    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setSelected:NO animated:YES];

    if ([self.pickedArtists containsObject:selectedArtist]) {
        [self.pickedArtists removeObject:selectedArtist];
        [cell setAccessoryType:UITableViewCellAccessoryNone];
        editingAlbum.artist = self.pickedArtists;
        [self saveTheContext:editingAlbum.managedObjectContext];
//        NSLog(@"%d",self.pickedArtists.count);
    }
    else {
        [self.pickedArtists addObject:selectedArtist];
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
        editingAlbum.artist = self.pickedArtists;
        [self saveTheContext:editingAlbum.managedObjectContext];
//        NSLog(@"%d",self.pickedArtists.count);
    }
}

我认为在managedObjectContext保存中肯定存在一些问题。 应该是这样吗

self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
[self saveTheContext:self.managedObjectContext];

而不是

[self saveTheContext:editingAlbum.managedObjectContext];

我试过这个,但这也没能按照预期工作。

You can find my source code here

2 个答案:

答案 0 :(得分:3)

我已更新您的代码。请检查一下。他们是艺术家&的相册即可。它必须是多对多的。

相册&的关系艺术家是1对多。因此,如果您为多个相册选择艺术家,那么它将覆盖其值。请检查您的数据库是否相同。

代码:Click Here

答案 1 :(得分:1)

每位艺术家都可以拥有多张专辑,但根据模特,每张专辑都可以包含很多艺术家。多对多关系应该颠倒或替换为多对多类型(每张专辑可以包含许多艺术家,每个艺术家可以有很多专辑)

专辑 - 歌曲关系类型也可能是以后的问题......