Hi zusammen,
ich bin am verzweifeln! Habe schon das halbe Internet durchforstet und sämtliche Codesnippets ausprobiert, doch komme einfach zu keinem richtigen Ergebnis
Die Abfrage vom Server funktioniert perfekt, durch [operation responseString] bekomme ich die Antwort und das benötigte XML, soweit so gut.
Allerdings wo ich absolut keine weitere Ideen habe, ist der return des Strings, zu dem Zeitpunkt wo return [operation responseString]; ausgeführt wird, ist der string noch leer. Dies kommt daher das der Block in einem seperaten Thread ausgeführt wird, und der Compiler den Code weiter abarbeitet. Erst ein paar Millisekunden später ( im Schnitt ungefähr 15msek ) bekomm ich die Response: ( im Log: Response 123...)
Wie kann ich dem mainThread sagen er soll warten bis er die Variable returned?
Bzw. er soll die Variable erst returnen wenn sie gesetzt wurde! Mit warten ist ja so 'ne Sache
Ich bin auch für alle anderen Alternativen offen, auch komplett neue, ich brauch dies lediglich nur in dem getXML und mit einer User/Passwort Abfrage.
Alles anzeigen
Vielen Dank schonmal
Masel
ich bin am verzweifeln! Habe schon das halbe Internet durchforstet und sämtliche Codesnippets ausprobiert, doch komme einfach zu keinem richtigen Ergebnis
Die Abfrage vom Server funktioniert perfekt, durch [operation responseString] bekomme ich die Antwort und das benötigte XML, soweit so gut.
Allerdings wo ich absolut keine weitere Ideen habe, ist der return des Strings, zu dem Zeitpunkt wo return [operation responseString]; ausgeführt wird, ist der string noch leer. Dies kommt daher das der Block in einem seperaten Thread ausgeführt wird, und der Compiler den Code weiter abarbeitet. Erst ein paar Millisekunden später ( im Schnitt ungefähr 15msek ) bekomm ich die Response: ( im Log: Response 123...)
Wie kann ich dem mainThread sagen er soll warten bis er die Variable returned?
Bzw. er soll die Variable erst returnen wenn sie gesetzt wurde! Mit warten ist ja so 'ne Sache
Ich bin auch für alle anderen Alternativen offen, auch komplett neue, ich brauch dies lediglich nur in dem getXML und mit einer User/Passwort Abfrage.
Quellcode
- -(NSString*)getXML{
- NSString *string_baseurl = @"https://testdomain.com"; //Beispiel URL!
- NSString *string_url = [NSString stringWithFormat:@"%@/testpath/test.php",string_baseurl];
- AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:string_url]];
- [httpClient setParameterEncoding:AFFormURLParameterEncoding];
- [httpClient setAuthorizationHeaderWithUsername:string_benutzername password:string_passwort];
- NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
- path:string_url
- parameters:nil];
- AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
- [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
- [operation setAllowsInvalidSSLCertificate:NO];
- [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
- // Print the response body in text
- NSLog(@"Response 123: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
- } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
- NSLog(@"Error: %@", error);
- }];
- [operation start];
- NSOperationQueue *queue = [[NSOperationQueue alloc] init];
- // count can be anything you like
- [queue setMaxConcurrentOperationCount:2];
- if ([operation isFinished]) {
- [queue addOperation:operation];
- }
- [queue waitUntilAllOperationsAreFinished];
- NSLog(@"should be after 'Response 123'");
- return [operation responseString];
- }
Vielen Dank schonmal
Masel