一時的なNSManagedObjectを作成し、それをメインのNSManagedObjectContextに関連付けます。コンテキスト内で完全に機能するオブジェクト(フェッチ要求の実行など)として処理できる必要があるため、コンテキストが関連付けられていないと作成できません。新しいViewControllerがスタックにプッシュされただけではないという条件の下で、ViewWillDisappearに管理対象オブジェクトを削除するロジックを含めます。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSArray *viewControllers = self.navigationController.viewControllers;
if (viewControllers.count > 1 && [viewControllers objectAtIndex:viewControllers.count-2] == self) {
// View is disappearing because a new view controller was pushed onto the stack
} else {
// View is disappearing for some other reason
[self.community.managedObjectContext deleteObject:self.community];
}
}
これにより、アプリケーションの終了を除くすべての場合で、管理対象オブジェクトが適切に削除されるようです。viewDidUnloadでオブジェクトを削除しようとしましたが、アプリケーションの終了時にメソッドが呼び出されていないようです。2番目の管理対象オブジェクトコンテキストを作成することを検討しましたが、可能であれば大きなオーバーヘッドを避けたいと思います。
ありがとう、グラハム