0

お絵かきアプリを作っています。タップするたびに、いくつかのコア データ エンティティが作成されます。ユーザーは元に戻すボタンを押すことができ、それらのクリックは一度に 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...

    }];
}];
4

1 に答える 1

0

1 つのアイデアは、元に戻したいコードの各ブロックを独自のブロック (同じ子コンテキストを持つ) で囲むことです。たぶん、それを 2 つのチャンクに分割し始めて、それが機能するかどうかを確認してください。

よく考えてみると、各保存は実際には保存されているのではなく、変更を親コンテキストにプッシュしているだけだと思います。したがって、親コンテキストは、各子の保存を1つの元に戻すことができるイベントとして登録すると思います。より頻繁に保存してから、これらのチャンクを取り消すことができるかどうかを確認してください。

于 2013-03-15T21:42:24.793 に答える