私はiOSのNSOperationQueueから始めて、明確にしたいいくつかの基本的な問題に直面しています。
これは私が使用しているコードです:
-(void) SendRequestWithURL:(NSString*) URL andParam:(id) attributes {
[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];
_m_singleton = [Singleton sharedSingleton];
_parser = [[Syncparser alloc]init];
NSString *strServURL = [NSString stringWithFormat:@"%@%@",_m_singleton.globalstrURLLink,URL];
if (_theService == Item0 || _theService == Item1 || _theService == Item2){
NSLog(@"Entrance _theService %i", _theService);
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:strServURL]];
[client postPath:@"POST" parameters:attributes
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"_theService %i", _theService);
switch (_theService) {
case Item0: {
[_m_singleton.globalQueue addOperationWithBlock:^{
NSLog(@"ParseItem0 %@", [operation responseString]);
[_parser ParseItem0:[operation responseString]];
}];
}
break;
case Item1:{
[_m_singleton.globalQueue addOperationWithBlock:^{
NSLog(@"ParseItem1 %@", [operation responseString]);
[_parser ParseItem1:[operation responseString]];
}];
}
break;
case Item2:{
[_m_singleton.globalQueue addOperationWithBlock:^{
NSLog(@"ParseItem2 %@", [operation responseString]);
[_parser ParseItem2:[operation responseString]];
}];
}
break;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}
}
item1とitem2のみを呼び出しました。これらは、デバッガーで取得する値です。
Entrance _theService 1
Entrance _theService 2
_theService 2
_theService 1
これは明らかに、item2が最初にキューに追加され、次にitem1が追加されることを意味します。
しかし、驚くべきことに、ParseItem1は毎回ParseItem2の前に呼び出されます。_theService1が_theService2の前にある場合でも。理由はわかりません。noobの質問でごめんなさい。
いくつかのガイダンスが必要です。