NSOperation
を使用してデータをインポートするコードに取り組んでいます。NSManagedObject
インポート操作中に作成されたインスタンスをユーザーが元に戻せるようにしたいと考えています。
私が知るNSManagedObjectContext
-undoManager
限り、メイン スレッドから実行される操作に を使用することは不可能です。Use Thread Confinement to Support Concurrencyに関するCore Data Programming Guideセクションから、次の 2 つの条件があります。
- 管理対象オブジェクト コンテキスト間で (別のスレッドで) objectID のみを渡す必要があります。
- objectID を使用する前に、管理対象オブジェクトをコンテキストに保存する必要があります。
管理対象オブジェクトを共有する前に、プライベート ストレージ ( NSManagedObjectContext
) からパブリック ストレージ ( )に移動する必要があるため、これは理にかなっています。NSPersistentStore
残念ながら、この-save:
メッセージにより、元に戻すスタック内のマネージ オブジェクトも削除されます。同じガイドの「コア データを使用した メモリ管理」セクションから:
保留中の変更 (挿入、削除、または更新) がある管理対象オブジェクトは、そのコンテキストに save:、reset、rollback、または dealloc メッセージが送信されるか、変更を元に戻すための適切な回数の元に戻すまで、コンテキストによって保持されます。
この制限を回避するためにいくつかのことを試しましたが、最終的にはすべてがメイン スレッド (および回転するビーチ ボール) で発生する作業の大部分に戻ります。とても有難い。
--
拡張レーダーが送信されました: rdar://problem/8977725