iPhoneアプリで断続的で再現が難しいエラーが発生しているので、同時実行性に関する仮定を確認しています。
AFNetworking v0.10.xを実行していると、次のネットワーク呼び出しがあります。
[self postPath:@"/myEndPoint"
parameters:params
success:^(AFHTTPRequestOperation *request, id response)
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
// do stuff with object context here
[appDelegate.objectContext save];
}
]
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
// do other stuff with object context
[appDelegate.objectContext save];
私のAppDelegateで:
-(NSManagedObjectContext*) objectContext
{
if(nil == _objectContext)
{
... set up sqlite persistent store coordinator and object model ...
_objectContext = [[NSManagedObjectContext alloc] init];
[_objectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
[_objectContext setMergePolicy:NSOverwriteMergePolicy];
}
return _objectContext;
}
このシナリオでは、並行性の問題が発生する可能性はありますか?または、言い換えると、AFNetworkingのAPIはスレッドセーフですか?NSOverwriteMergePolicyで競合をカバーできると思いましたが、クラッシュは持続します(断続的ではありますが)。