![](/img/trans.png)
[英]AFNetworking: Can't get the response string from AFHTTPRequestOperation
[英]Can't get response from async block using AFNetworking 3.0
我是IOS開發的新手,所以我可能只是缺少一些基礎知識。 已經為這個問題苦苦掙扎了2天。 所以,就在這里。 我的API類中有一個數據任務:
//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];
然后像這樣檢索json字典:
-(NSDictionary *)returnJSON{
if(self.didSendRequest) return self.jsonDictionary;
else NSLog(@"No dictionary dowloaded");
return self.jsonDictionary;}
然后,在其他類中,我將url和dictionary傳遞給數據任務方法,並像這樣獲得響應:
-(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;}
最后,我在這樣的視圖控制器類中調用它:
//button click method here
response = [lh userLogin : userEmail : userPass];
if (response) {//do some action}
所以,是的,正如您所看到的,我調用了一個方法,該方法然后異步執行下載任務,然后我立即檢查返回值,當然是“空”。 那么如何將返回值與dataTask同步,或以其他任何方式檢查其完成?
正如預期的那樣,已經嘗試了愚蠢的“ while循環”和信號量方法,它們都掛了主線程。 嘗試了一些帶有通知的內容,但最終沒有結果。
我很確定它有一個該死的簡單解決方案,但無法實現。
希望得到任何幫助。
是的,您缺少一些基本知識。
您不能調用異步操作的方法並立即獲得答案。 解決的辦法是編寫采用完成塊的方法。 然后,您在完成塊中傳遞要執行的代碼。 在結果可用之前,方法調用立即返回,但是下載任務完成后,將調用完成塊代碼。
我寫了一個SO答案,其中包括一個示例應用程序,但它是用Swift編寫的。 如果您是iOS開發的新手,並且正在Objective-C中工作,則可能很難遵循。
如果您只是在學習iOS開發,則應認真考慮學習Swift。 蘋果公司清楚地表明,Swift是iOS開發的未來。 學習Objective-C也很有用,但我建議您將重點放在Swift上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.