NSManagedContext
ネストされたコンテキストを介して、1 つから複数に移動しようとしています。
私は私を助けるためにそれらの記事を使用しています:
- http://www.cocoanetics.com/2012/07/multi-context-coredata/
- http://floriankugler.com/blog/2013/4/2/the-concurrent-core-data-stack
実際のシステム
[myHTTPClient getPath:path
parameters:@{access_token & stuff}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
for (NSDictionary *dictionary in responseObject)
{
// filling the dic in a NSManagedObject
}
[myMainContext save:&error];
}, failure:failureBlock];
指名手配システム
[myHTTPClient getPath:path
parameters:@{access_token & stuff}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
__block NSManagedObjectContext *managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
__block NSManagedObjectContext *writerObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] writerManagedObjectContext];
__block NSManagedObjectContext *temporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
temporaryContext.parentContext = managedObjectContext;
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
[temporaryContext performBlock:^{
for (NSDictionary *dictionary in responseObject)
{
// filling the dic in a NSManagedObject
}
[temporaryContext save:&error];
[managedObjectContext performBlock:^{
[managedObjectContext save:&error];
[writerObjectContext performBlock:^{
[writerObjectContext save:&error];
}];
}];
}];
}, failure:failureBlock];
ダイアグラム
問題
この方法を使用しているときにデータの保存に問題がありましたが、解決しました ( https://stackoverflow.com/questions/18151827/coredata-writermanagedobjectcontext-freeze-when-saveを参照) 。
ただし、前の質問で述べたように、シミュレーターでは2 倍速くなりますが、デバイスでは5 倍遅くなります。iPod Touch 4thを使ってテストしています。
どうすればそれが可能になり、どうすればそれを改善できますか? 私はこの図を使用することに反対していません:
しかし、それをコードに統合する方法を知りたいと思っています。
ありがとうございました。