3

特定のエンティティに対してNSManagedObjectサブクラスが作成されたときに自動的に作成されるCoreDataとオブジェクトの削除機能に関する質問があります。私は実体を持たなければなりません。1つはLabelと呼ばれ、1つの関係はartistsと呼ばれ、もう1つのエンティティはArtistと呼ばれ、1つの関係はlabelと呼ばれます。アーティストリレーションシップの宛先は、ラベルに逆リレーションシップが設定されたエンティティArtistです。

同じ名前の「Artist」(Freekey Zekey)をいくつか追加し、次のコードを使用してそれらを削除しようとしています

NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

// Grab the artist and delete
Artist *freekey = [fetchedObjects objectAtIndex:0];
[freekey.label remove ArtistsObject:freekey];


// Save everything
if([context save:&error])
{
    NSLog(@"The save was successful!");
}
else
{
    NSLog(@"The save wasn't successful: %@", [error localizedDescription]);
}

このコードを実行した後、データを読み取りましたが、「Freekey Zekey」が1つしかない場合にのみ、アーティストが削除されます。ただし、アプリを再度実行すると、fetchedObjects内のオブジェクトの数は1のままです。「FreekeyZekey」が複数ある場合は、1つだけが削除されると思いますが、それは起こりません。

このコードを使用して、すべての「フリーキージーキー」を削除してみました

for(int i=0; i < [fetchedObjects count]; i++)
{
    freekey = [fetchedObjects objectAtIndex:i];

    [freekey.label remove ArtistsObject:freekey];
}

そしてそれは機能しますが、fetchedObjectsのオブジェクトの数を確認すると、0ではありません。これは、オブジェクトが削除されていないことを意味すると思います。

オブジェクトを完全に削除するにはどうすればよいですか?

4

2 に答える 2

3

答えは: DB からアーティストを完全に削除するわけではありません。関係を削除したところです。削除を完了するには、アーティストも削除する必要があります。

for(int i=0; i < [fetchedObjects count]; i++)
{
    freekey = [fetchedObjects objectAtIndex:i];
    [freekey.label removeArtistsObject:freekey];
    [context deleteObject:freekey];
}
if([context save:&error])
{
    NSLog(@"The save was successful!");
}
else
{
    NSLog(@"The save wasn't successful: %@", [error localizedDescription]);
}

それが役に立てば幸い。

于 2013-02-19T07:14:26.533 に答える
2

これについては、Appleのドキュメントはあまり明確ではありません。一般的な方法は、Apple がアドバイスしたとおりです。

Data *lastData = [[self sortedPersonDatas] objectAtIndex:0];
[selectedPerson removePersonDataObject:lastData];

ここで、PersonData は、Data 管理対象オブジェクトとの 1 対多の関係です 最後のデータを取得しました (lastData は、すべてのデータの並べ替えられた配列から得られたものです)。しかし、ファクトリの削除メソッドを使用し、背後にある SQL データベースをチェックすると、実際のデータが逆の関係がnullであることだけが存在します。データ (すべての属性とオブジェクト) を完全に削除するには、以下を使用する必要がありました。

[selectedPerson.managedObjectContext deleteObject:lastData];

これにより、コンテキストを保存するとレコードが完全に削除されます。Apple からの正しいドキュメント

于 2013-02-19T17:26:06.227 に答える