2013-03-21 6 views
9

CoreDataにデータをダウンロードしてインポートするNSOperationサブクラスがあります。どのMagicalRecord保存メソッド

これを実行したら、コンテキストを保存してデフォルトのコンテキストにマージします。

保存はブロック内で行われません。すでにBGスレッド内にあるので、保存は同期して行われます。

私はMR保存方法を使用する必要がある変更を行ったことがありますか?

数十もあり、それぞれが何をしているのかは分かりません。

私が使用する必要があります...

- (void)save: 
- (void)saveOnlySelfAndWait; 
- (void)saveToPersistentStoreAndWait; 

または私は私がの終了を制御することができるように、それは同期になりたいで...

+ (void)saveUsingCurrentThreadContext... 

すべての変更を行う必要があります操作。

少なくとも、さまざまなセーブの違いを説明できる人がいますか。

答えて

14

私はこれらの方法がうまく文書化されていないことを認めます。しかし、彼らはCore Dataネストされたコンテキストモデルをかなりうまく使います。 MagicalRecord

  1. NSManagedObjectContextに​​を使用しないでください。 MagicalRecordには、余分なエラー処理、ロギング、補完ハンドラが組み込まれています。それらを使用したいと考えています。

  2. データがどこから(ルートからルートに)移動する必要があるかがわかります。どのセーブ方法を使用する必要があるかは、階層によって異なります。 1レベルだけ深い場合(の子コンテキストでdefaultContext)、saveOnlySelfAndWaitdefaultContextに保存されます。それ以外の場合は、saveToPersistentStoreAndWaitが階層を横断してデータストアに移動します。

  3. andWaitのメソッドが呼び出しをブロックしています。補完を伴う呼び出しはハンドラではありません。これらは、使用時にはかなり単純です。

+0

パーフェクト!再度、感謝します。 AFAIK私は深い階層構造を全く作りません。 NSOperationで[NSManagedObjectContext contextForCurrentThread]を使用するだけです。私はsaveToPersistentStoreAndWaitを使用して確実にします。再度、感謝します。 – Fogmeister

+0

@Fogmeisterあなたはこれをあなたのために働かせることができましたか?私はNSOperation内に保存しようとしていますが、エラーが出ない間はオブジェクトは空白です。 – RyanJM

+0

@casademoraもし私がdefaultContextだけを使うのであれば?私はMagicalRecordを使い、MR_defaultContextを使うだけです – onmyway133

関連する問題