0

これがcoredataアーキテクチャの構造です。ここに画像の説明を入力

「アーティスト」にエントリを追加した後、新しく追加された「アルバム」エントリにそれらを使用すると、完全に機能します。

ここに画像の説明を入力

しかし、問題は画像 2 と 3 に示すように、「マイケル ジャクソン」を「インソムニアック 2010」アルバムに割り当て、同じアーティストを「ベイビー フィート リュダクリス」に追加すると、アルバム「インソムニアック」からの参照が失われます。

これは、コンテキストを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];

これを試しましたが、これも期待どおりに機能しません。

ここで私のソースコードを見つけることができます

4

2 に答える 2

3

コードを更新しました。あわせてご確認ください。これはアーティストアルバムの関係の問題です。多対多でなければなりません。

アルバムアーティストの関係は 1 対多です。したがって、複数のアルバムのアーティストを選択すると、その値が上書きされます。データベースを確認してください。

コード :ここをクリック

于 2013-04-09T10:25:44.837 に答える