Ich weiß, es gibt another similar question, aber es ist für eine ältere Version von AFNetworking, und beantwortet es nicht wirklich sowieso.AFNetworking-2 waitUntilFinished funktioniert nicht
Ich habe den folgenden Code:
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy.allowInvalidCertificates = YES;
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername: currentUser() password: currentPassword()];
__block NSDictionary* response = nil;
AFHTTPRequestOperation* operation = [manager
GET: @"https://10.20.30.40:8765/foobar"
parameters: [NSDictionary dictionary]
success:^(AFHTTPRequestOperation* operation, id responseObject){
response = responseObject;
NSLog(@"response (block): %@", response);
}
failure:^(AFHTTPRequestOperation* operation, NSError* error){
NSLog(@"Error: %@", error);}
];
[operation waitUntilFinished];
NSLog(@"response: %@", response);
...
Wenn ich das ausführen, was ich in meinem Log sehen werden ist:
2013-12-09 09:26:20.105 myValve[409:60b] response: (null)
2013-12-09 09:26:20.202 myValve[409:60b] response (block): {
F00005 = "";
F00008 = "";
F00013 = "";
}
Die NSLog
die erste nach die waitUntilFinished
Feuer ist . Ich habe erwartet, dass es an zweiter Stelle feuert. Was vermisse ich?
Leider Option # 1 hängt nur die Dinge vollständig. Kein Block feuert jemals. Nicht sicher, warum es das tut, aber es tut es. –
Ich verstehe die Sache "hängen die UI ist schlecht".Was ich in diesem Fall mit dem Problem habe, sind REST-Abfragen, um lokale Modelle zu aktualisieren. Also würde ich gerne dieses AF-Zeug in die Modellklassen legen, um das Update zu machen. Also muss ich dann eine dieser Methoden mit undWhenYourDone: Blocks erweitern, damit ich bei Bedarf UI-Updates auslösen kann. –
@TravisGriggs Dann geben Sie einfach die 'updateModel'-Methode Block Parameter Ihres Modells (nicht anders als die' Erfolg' und 'Fehler' Blöcke, die AFNetworking selbst verwendet). Auf diese Weise kann der View-Controller effektiv sagen: "Aktualisieren Sie das Modell, und wenn Sie fertig sind, machen Sie x, y und z". Siehe überarbeitete Antwort. – Rob