2016-11-28 3 views
0

Ich benutze GET-Methode auf Json. Die GET-Methode befindet sich in einer for-Schleife und das Problem besteht darin, dass die Task nicht beendet wird oder das Ergebnis nicht abgerufen wird. Stattdessen wird die Schleife inkrementiert. Ich habe einen Haltepunkt innerhalb des Blocks platziert, wo ich die Ergebnisdaten zu einem NSDictionary setze, aber es geht nie dorthin.Wartet oder nicht beenden den Codeblock in bekommen Json

Ist es möglich, dass die GET-Methode direkt aufgerufen wird? Ich meine, der Code wird Zeile für Zeile gelesen. Und es wird nicht überspringen oder warten, bis der JSON die Verarbeitung beendet hat?

Hier ist, was ich getan habe:

- (void)downloadJsonFeed 
{ 
for(int i = 1;i < self.numberOfEpisodes;i++) 
{ 
    NSString *endPoint = [[[[baseJsonUrl stringByAppendingString:getEpisodes]stringByAppendingString:self.title]stringByAppendingString:@"&episodeNumber="]stringByAppendingString:[NSString stringWithFormat:@"%i",i]]; 
    NSLog(@"End point %@",endPoint); 
    [JsonDownload getJson:token andEndpointString:endPoint WithHandler:^(__weak id result) 
    { 
     NSArray *episodeArray =result; 
     //will do some task here 
    }]; 

} 

} 


- (void)getJson:(NSString *)authData andEndpointString:(NSString *)urlString WithHandler:(void(^)(__weak id result))handler 
{ 
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]]; 
NSURL * url = [NSURL URLWithString:urlString]; 
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url]; 

//NSString *auth = [NSString stringWithFormat:@"Bearer {%@}", authData]; 

[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-type"]; 
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[urlRequest setValue:authData forHTTPHeaderField:@"Cookie"]; 
[urlRequest setHTTPMethod:@"GET"]; 

NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest 
                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
                 if(error == nil) 
                 { 
                  id returnedObject = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableLeaves error:nil]; 
                  handler(returnedObject); 
                 } 
                 else{ 
                  NSLog(@"error %@",error); 
                 } 
                }]; 
[dataTask resume]; 
} 

ich einen Haltepunkt in dieser Zeile NSArray *episodeArray =result; platziert haben und es geht nie dort. Aber wenn ich den Unterbrechungspunkt auf [JsonDownload getJson:token andEndpointString:endPoint WithHandler:^(__weak id result) Linie stelle, antwortet es

Und auf der kommentierten Linie //will do some task here muss ich zu einer Aufgabe dort, bevor ich ein anderes json wieder erhalte. Aber ich kann nicht verursachen, dass es nie innerhalb des Codeblocks geht

Antwort

0

Das Problem behoben, in dem Leerzeichen in meinem EndPoint durch% 20

ersetzt werden
Verwandte Themen