6

私はこのコードを持っています:

Store* store = [NSEntityDescription insertNewObjectForEntityForName:@"Store"];
store.name = @"My Company"
...

現在、ストアはコンテキストで管理され、コンテキストが保存されると保存されますが、データが収集されるフォームをユーザーがキャンセルできるボタンがあります。これを元に戻す、またはコンテキストから削除するにはどうすればよいですか? それとも私の考えが間違っていますか?

4

5 に答える 5

12

Core Data にはundo のサポートが組み込まれ-undoているため、メッセージをコンテキストに送信することで個々の変更を元に戻すことができます。

[store.managedObjectContext undo];

にも対応しています-redo-rollbackメソッドを使用して、最新の保存までのすべての変更を元に戻すことができます。

[store.managedObjectContext rollback]

@melsamの回答に示されているように。

于 2012-05-24T20:58:54.957 に答える
8

前述のように、元に戻すマネージャーを使用できます。または、単純に別の ManagedObjectContext を使用して、そこですべての変更を行うこともできます。それらを保持する場合は、コンテキストを保存します。そうでない場合は、単に破棄してください。MOC は作業用のスクラッチ パッドにすぎず、保存されるまでは基になるデータベースに影響を与えません。

実際に「エンティティをデタッチ」することはできませんが、管理対象オブジェクトを障害に戻し、保存されていない変更を失う可能性があります。

[managedObjectContext refreshObject:object mergeChanges:NO];

ドキュメントから切り取った...

フラグが NO の場合、オブジェクトはフォルトになり、保留中の変更はすべて失われます。オブジェクトは、再度アクセスされるまでフォルトのままです。アクセスされると、そのプロパティ値がストアまたは最後にキャッシュされた状態から再ロードされます。

于 2012-05-24T22:14:14.657 に答える
6
[store.managedObjectContext rollback];
于 2012-05-24T20:49:11.323 に答える
0

また、ユーザーからのすべてのデータを配列に保存することもできます。ユーザーの準備ができたら、配列をコア データに保存するだけで済みます。

于 2012-05-24T20:58:46.493 に答える