私のアプリでは、JSONを返す2つのWebサービスに接続する必要があります。
私は最初にGCDを使用して独自のネットワークコードをロールしましたが、AFNetworkingがどのように処理するかを見て、それを実装することにしました。ほとんどのことがうまくいきましたが、ある時点で、オブジェクトで満たされた2つの配列を取得しています。次に、これら2つのアレイは、異なる方法を使用して比較されます。どういうわけか、実際のエンキューは、使用しているコードに応じて、遅延するか、機能しません。
使用する場合:
NSArray *operations = [NSArray arrayWithObjects:operation, operation1, nil];
AFHTTPClient *client = [[AFHTTPClient alloc]init];
[client enqueueBatchOfHTTPRequestOperations:operations progressBlock:nil completionBlock:^(NSArray *operations) {
[self compareArrays:self];
}
ハングするだけです。
使用する場合:
[operation start];
[operation1 start];
[operation waitUntilFinished];
[operation1 waitUntilFinished];
[self compareArrays:self];
最後に、配列を取得しますが、UIが形成された後にのみ比較します。
編集:私はデイブの答えをチェックしました、そしてそれは本当に合理化されたように見えます。私のアプリはを使用することでメリットがありますかAFHTTPClient
、それともこの方法(を使用してAFJSONRequestOperation
)は同じ機能を提供しますか?到達可能性を自分で処理することを今思い出しAFHTTPClient
ます(設定する必要がありますが)。私は少しいじって、これを機能させました:
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
WebServiceStore *wss = [WebServiceStore sharedWebServiceStore];
self.userData = wss.userData;
serviceURL = [NSString stringWithFormat: @"WEBSERVICE URL"];
NSString* zoekFruit = [NSString stringWithFormat:
@"%@?customer=%@&gebruiker=%@&password=%@&breedte=%@&hoogte=%@&diameter=%@",
serviceURL,
self.userData.Klant,
self.userData.Gebruiker,
self.userData.Wachtwoord,
breedte,
hoogte,
diameter];
NSURL *url = [NSURL URLWithString:[zoekFruit stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
id results = [JSON valueForKey:@"data"];
[results enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//Initiate the BWBand
BWBand *band = [[BWBand alloc]init];
//Set the BWBand's properties with valueforKey (or so).
[getBandenArray addObject:band];
}];
NSLog(@"getBandenArray: %@",getBandenArray);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Error retrieving Banden" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[alert show];
}];
[queue addOperation:operation];