1

MagicalRecord、NSOperationsQueues、および NSURLRequests に問題があります。

MagicalRecord を介して CoreData からのデータ フェッチを処理するモデルを取得しました。それは正常に機能していますが、NSURLRequest を介して Web から API を介してデータをフェッチするバックグラウンド プロセスが必要です。これが主な問題です。に設定する必要がscheduleInRunLoop:forModeありNSURLConnectionます[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

モデルから NSOperationQueue へのコールバックがメイン スレッドによって処理され、すべてが機能しています。

取得したリソースを MagicalRecord 経由で CoreData に保存したいと考えています。NSOperationQueue からの現在のスレッドでの保存を処理するために、my[NSManagedObjectContext MR_contextForCurrentThread]startメソッドにmy を設定しました。NSOperationQueue

私が今直面している主な問題は[self.localContent MR_saveToPersistentStoreWithCompletion:]、完了ブロックを呼び出して、CoreData が PersistentStore に保存するのを待つことです。

しかし、この時点で完了ブロックが呼び出されることはなく、NSOperationQueue を更新して終了することはできません。

この時点で私が間違っていることは何ですか?

defaultContext に保存すると、次のステートメントでアプリがランダムにクラッシュします。

[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke3 Fatal Exception NSGenericException *コレクション <__NSCFSet: 0x1d0490c0> が列挙中に変更されました。

NSOperation 低優先度の同時実行制限キューがクラッシュしました

-[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] EXC_BAD_ACCESS

同じコンテキストで同時にアクセスして保存することが原因であることはわかっていますが、これを修正する方法がわかりません。

MagicalRecord の最新バージョンを使用しています

4

1 に答える 1

0

あなたの限られた説明と実際のコードの欠如から、私が提供できるのは、別のスレッドからセットを変更していることだけです。ほとんどの場合、まったく同じデータ セットを操作し、同じ管理対象オブジェクト コンテキストを共有する複数の NS 操作があります。1 つのスレッドが保存すると、1 つのスレッドでコンテキストが更新され、コレクションが変更済みとしてマークされます。次に、他のスレッドが入り、次のアクセスでこのエラーがトリガーされます。一度に起動する操作の数を特定する必要があります。すべての操作に単一のコンテキストがあり、すべての操作で 1 つのコンテキストを共有していないことを確認してください。

于 2013-07-20T18:22:02.573 に答える