CoreDataのマルチスレッド化について

CoreDataで大量のデータを扱ってる間はインターフェースの動き止まってしまうので,
別スレッドで作業する必要がある。

でもCoreDataはスレッドセーフじゃないので色々必要らしい。
参照は以下。

Mac Dev Center: Core Data Programming Guide: Multi-Threading with Core Data
http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdMultiThreading.html#//apple_ref/doc/uid/TP40003385

要約すると,
managedObjectをスレッド間で渡すときはmanagedObjectIDの形で渡して,
managedObjectContextのobjectWithID:メソッドで取得する。
managedObjectContextはスレッド毎に別に宣言すべし。
ということみたい。

persistentStoreCoordinatorもスレッド毎に用意した方が安全らしい。
managedObjectIDはフェッチ時にNSFetchedRequestのsetResultType:メソッドで
NSManagedObjectIDResultTypeを設定してやれば取得できる。