Ich bin neu in der IOS-Entwicklung, so dass ich wahrscheinlich nur ein paar Grundlagen fehlt. Habe schon seit 2 Tagen mit diesem Problem gekämpft. Also, hier ist es. Ich habe eine Daten Aufgabe in meiner API-Klasse:Antwort von Async Block kann nicht mit AFNetworking 3.0
//request generation, putting url and dictionary into it
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if(!error)
{
self.jsonDictionary = responseObject;
NSInteger HTTPStatusCode = [(NSHTTPURLResponse *)response statusCode];
NSLog(@"RESPONSE DATA: %@", self.jsonDictionary);
self.didSendRequest = YES;
}
else
{
self.didSendRequest = NO;
NSLog(@"ERROR: %@", error);
}
}];
[dataTask resume];
Und dann das json Wörterbuch wie folgt abrufen:
-(NSDictionary *)returnJSON{
if(self.didSendRequest) return self.jsonDictionary;
else NSLog(@"No dictionary dowloaded");
return self.jsonDictionary;}
Dann in anderen Klasse übergeben i url und Wörterbuch auf die Daten-Task-Methode, und erhalten Antwort wie folgt aus:
-(NSDictionary*)userLogin : (NSString*)email : (NSString*) password {
dataTaskClass* aph = [[dataTaskClass alloc] init];
NSDictionary *userParams = [[NSDictionary alloc] initWithObjectsAndKeys:
email,@"email",
password,@"password",
nil];
[aph postRequest: @"myUrl"];
return dataTaskClass.returnJSON;}
und dann endlich ich nenne es in meiner view-Controller-Klasse wie folgt aus:
,Also, yeah, wie Sie sehen können, rufe ich eine Methode, die dann die Download-Aufgabe asynchron ausführt, und danach überprüfe ich sofort den Rückgabewert, der natürlich "null" ist. Also, wie synchronisiere ich den Rückgabewert mit DataTask, oder überprüfen Sie die Fertigstellung auf andere Weise?
Bereits versucht die dumme "While-Schleife" und Semaphor-Ansatz, beide hängen den Haupt-Thread, wie erwartet. Versuchte etwas mit Benachrichtigungen, aber am Ende nichts.
Ich bin mir ziemlich sicher, dass es eine verdammt einfache Lösung hat, aber es nicht bekommen kann.
Würde mich für jede Hilfe freuen.
Ich würde beginnen, indem Sie überprüfen, dass die URL tatsächlich eine gültige JSON-codierte Antwort mit tatsächlichen Daten zurückgegeben hat. Vielleicht muss die URL die Daten, die zurückgegeben werden sollen, in eine Protokolldatei schreiben. – DontKnow
Nein, die URL ist in Ordnung. Ich habe vorher NSURLSession verwendet und einfach auf eine Antwort in einer while-Schleife gewartet. Das Problem war, dass NSURLSession Probleme mit der API hatte, die ich verwende, also musste ich zu AFnetworking wechseln. Jedenfalls ist die Verwendung von Completion Block die einzig richtige Antwort, denke ich. – briznichenko