2011-07-23 35 views
0

我有一個將發出服務器請求的視圖控制器。我已將所有服務器請求處理程序放在一個類中。所以在視圖控制器中,只需使用[Apihandler getlist]來獲取列表。在ASIBasicBlock中獲取返回值

在類Apihandler,我使用的塊在

[_request setCompletionBlock:^{}] 

來獲得服務器響應(JSON對象)。

如果JSON對象包含一個名爲「error」的鍵/值,我將把它作爲失敗,儘管它完成了ASIHttpRequest本身。否則,它是成功的。

問題是:我如何獲得以上完成塊的返回值?我查了ASI文件,ASIBasicBlock是void返回類型。

回答

2

我用一個委託做了這個。所以我看起來像這樣的代碼:

[request setCompletionBlock:^{ 
    NSLog(@"Data retrieved"); 
    NSData *data = [request responseData]; 
    NSLog(@"Status Code: %d", [request responseStatusCode]); 
    dispatch_async(backgroundQueue, ^(void){ 
     [self processData:data]; 
    }); 
}]; 

基本上說,當這個完成塊運行時,在後臺調用processData消息。在processData消息中,我使用委託將數據返回到主UI線程。該消息是這樣的:

- (void)processData:(NSData *)data { 

    NSError *error = nil; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 


    dispatch_async(dispatch_get_main_queue(), ^(void){ 
     [self.delegate requestDataReady:json]; 
    }); 
} 

我希望有幫助。

UPDATE:

當然,你不必運行在後臺線程的處理的方法。您可以輕鬆地在塊中調用[self processData:data],或者甚至可以將processData中的代碼放入塊中。

+0

非常感謝!我忘記了答案中有數據。通過解析這些數據,我可以知道並告訴其他人是否發生錯誤。 – LetBulletFlies