お絵かきアプリを作っています。タップするたびに、いくつかのコア データ エンティティが作成されます。ユーザーは元に戻すボタンを押すことができ、それらのクリックは一度に 1 つずつ元に戻されます。これはうまくいきます。
問題は、自動化されたタスクが実行されたときに発生します。子コンテキストで一連のコア データ エンティティを作成し (それ自体でいくつかのものを描画します)、コンテキストを保存して、変更がメイン コンテキストに反映されるようにするボタンがあります。
問題は、ユーザーがタスク ボタンを何回押しても関係なく、すべての変更が 1 つの元に戻すステップにグループ化されることです。
明確にするために: 彼は 5 つのタスクを作成し、[元に戻す] を 1 回押すと、最初に戻ります。しかし、私は彼が各タスクを 1 つずつ元に戻すことができるようにしたいと考えています。
私は UIManagedDocument を使用しており、それは Core Data スタックです。したがって、これは 2 つのコンテキストです。1 つはディスクへの書き込み、もう 1 つは一般的な使用のための子です。次に、後者の子をバックグラウンド操作用に作成します。
これは私のコードです:
NSManagedObjectContext* childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = self.document.managedObjectContext;
childContext.undoManager = self.document.undoManager;
[childContext performBlock:^{
//a lot of things happen here, that generate many entities
[childContext save:nil];
[self.document.managedObjectContext performBlock:^{
//completion stuff, update UI...
}];
}];