基本的に、私はNSManagedObjectContext
から削除してコンテキストを保存した後、aのいくつかのプロパティにアクセスしようとしています。問題は、コンテキストを保存した後で、Core Dataがオブジェクトデータをfaultとしてマークし、明らかに回復できないことです。管理対象オブジェクトを削除した後のコアデータの障害
問題を再現するためにサンプルプロジェクトを作成しました。hereをダウンロードできます。
City *city = [self.cities objectAtIndex:indexPath.row];
[self.managedObjectContext deleteObject:city];
if (![self.managedObjectContext save:&error]) {
[self.managedObjectContext rollback];
NSLog(@"Error: %@", error);
}else{
NSLog(@"%@", city);
// All properties of "city" are zeroed.
// Saved. Update data sources and animate changes...
}
を生成します:、次のスニペットを説明するために
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: {
country = "0xd000000000080002 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/Country/p2>";
name = Rosario;
})
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: <fault>)
私はそれを削除した後、管理対象オブジェクトにアクセスしたい理由を、のためのデータソースとして機能NSMutableArray
を更新することですテーブルビューを作成し、ナビゲーションコントローラスタック内の以前のコントローラの別のデータソースを更新します(サンプルプロジェクトでは実装されていません)。アップラッピング
は、私の質問は以下のとおりです。
そのNSManagedObjectContext
からNSManagedObject
を削除して、コンテキストを保存した後、もはや、管理オブジェクト内のデータにアクセスできることが保証されていませんか?その管理オブジェクトへの参照が保持されていても?
調査した内容に基づいて、コンテキストが保存されると、コアデータがエンティティデータを消去してメモリを節約しています。この仮定は正しいですか?このデータフォルトを引き起こしている他の要因はありますか?
ありがとうございました。
なぜコンテキストを保存した後に削除されたオブジェクトにアクセスできると思われますか?データソースには 'NSFetchedResultsController'を使います。 – Avi
削除されたオブジェクトへの参照は使用しないでください。 – Andy
@Avi管理対象オブジェクトへの参照を保持しているためです。 – Mateus