4

UITableViewControllerには、私のデータにNSFetchedResultsControllerを使用しています。私は別のスレッドでいくつかのオブジェクトをインポートするときを除いて、すべてうまく動作します:私はにオブジェクトを挿入するNSOperationQueueを使用します。これは別のビューで行われます。 NSFetchedResultsControllerはこのようではなく、コンソールに書き込みません。NSFetchedResultsControllerとNSOperation

重大なアプリケーションエラーです。 -controllerDidChangeContent:の呼び出し中に、NSFetchedResultsControllerの代理人から例外がキャッチされました。 userInfo(null)でセルの2つのアニメーションを作成しようとしました

明らかに新しいオブジェクトを取得しようとしています。

同時実行のトピックでは、Core Data Programming Guideは、スレッドごとにManagedObjectContextを使用するようなものですが、それはやや複雑に聞こえます。

私は今、私は実際にそれでManagedObjectContextを作成し、自分のNSOperationサブクラスを作成する必要があるかどうかわからないというように、またはしばらくの間更新からNSFetchedResultsControllerを防止することが可能であるかどうか?

私は、申し訳ありませんあなたがスレッドごとNSManagedObjectContext必要があるいくつかの助けを借り、ファビアン

+0

iOS 5が出てきた時と同じロックを持っています。詳細ビューでエントリを変更すると、メインテーブルに戻り、ロックされます。私のアプリはiOS 4上で正常に動作しました。ユーザーがテーブルの行を編集するたびにロックされるようになりました。 iOS 5の新機能何が変わったの? – RyeMAC3

答えて

4

をいただければ幸いです!

コンテキストにアクセスするのはNSFetchesResultsControllerだけではなく、コンテキストにアクセスする必要があるまで、コアデータは何らかのデータをフェッチしません。

ただし、スレッドごとに作成する必要があるのはコンテキストだけです。デリゲートに、マネージオブジェクトコンテキストを作成し、各NSOperationで呼び出すメソッドを記述してください。これにより、同じものを使用するのではなくスレッドごとに行うことができます。

この方法でメインスレッドの管理コンテキストを作成することもできます。

+0

私はインポートを完了したとき、あるいは 'PersistentStoreCoordinator'がこれを行うとき、何らかの形で異なる' ManagedObjectContext'を同期させる必要がありますか? – fabian789

+2

マネージオブジェクトコンテキストでsaveを呼び出すと、基になるデータベースが更新され、NSManagedObjectContextObjectsDidChangeNotification通知が生成されます。しかし、私はそれを使用したことはありません、私はいつも(自分自身の通知または代理人を通じて)自分自身に通知することをやった。スレッド間でオブジェクトを渡すことに注意する必要があります。これは、ランダムクラッシュを引き起こします。つまり、スレッドのIDをメインスレッドに戻し、メインスレッドの管理対象オブジェクトコンテキストから取得するからです。 – deanWombourne

+1

OK、今すぐコードを書きます。あなたはこれをあなたの答えに加えたいかもしれませんが、それはむしろ参考になります:http://www.duckrowing.com/2010/03/11/using-core-data-on-multiple-threads/ – fabian789