2014-04-25 44 views
0

對不起,如果這個問題太基本了,但我似乎無法在網上找到答案。如何在類方法中返回AFNetworking中的響應對象?

我想獲取JSON結果並讓它們返回下面的類方法。但正如你所看到的,通過在塊方法中獲取JSON,我沒有辦法將它們作爲結果返回。

從內部塊方法返回它們爲NSDictionary的正確方法是什麼?或者有什麼其他方法可以簡化它嗎?

+ (NSDictionary *) fetchtPostsCount:(NSString *) count 
           page: (NSString *) page { 
    NSDictionary *requestParameter = [[NSDictionary alloc] initWithObjectsAndKeys:count, @"count", page, @"page", nil]; 

    [[self sharedClient] GET:@"get_recent_posts" 
       parameters:requestParameter success:^(NSURLSessionDataTask *task, id responseObject) { 
        NSLog(@"%@", [responseObject objectForKey:@"posts"]); 

       } failure:^(NSURLSessionDataTask *task, NSError *error) { 
        NSLog(@"%@", error); 
       }]; 


    return nil; 
} 
+1

可能的[從塊內返回方法對象]的副本(http://stackoverflow.com/questions/22267865/returning-method-object-from-inside-block) – Wain

+0

@非常感謝,這正是我正在尋找的。 – sayzlim

回答

1

AFNetworking在不同線程上執行請求,並在完成時調用成功或失敗塊。從概念上講,你可以想象你的fetchPostsCount方法已經完成並且在請求完成時返回它的值。

你幾乎肯定希望它以這種方式工作。在另一個線程上運行請求,而不是等待它,允許您的主UI線程繼續處理事件並渲染屏幕更新。你不想妨礙這些事情,或者用戶(和iOS)會不高興。

但是,如果你堅持等待返回之前完成請求,你可以設置一個標誌來監控請求的狀態,然後在該標誌等到請求完成:

BOOL requestComplete = NO; 
id requestResponseObject = nil; 
[[self sharedClient] GET:@"get_recent_posts" 
      parameters:requestParameter success:^(NSURLSessionDataTask *task, id responseObject) { 
       requestResponseObject = responseObject; 
       requestComplete = YES; 
       NSLog(@"%@", [responseObject objectForKey:@"posts"]); 

      } failure:^(NSURLSessionDataTask *task, NSError *error) { 
       requestComplete = YES; 
       NSLog(@"%@", error); 
      }]; 
while (!requestComplete) 
{ 
    // Tie up the thread, doing nothing... 
} 
// Proceed 
+0

是否有任何推薦的方式來獲取結果,將它們解析爲適當的格式,並將它們異步存儲到我選擇的存儲中?我想通過包裝請求參數的類方法來簡化請求。我想我應該閱讀更多關於AFNetworking(只是看到像操作啓動等)。但是,這個答案讓我朝正確的方向,再次感謝。 – sayzlim

相關問題