2015-11-12 86 views
0

我正嘗試使用AFNetworking類從數據庫檢索數據。長話短說,從參數responseObject收到的數據充滿了項目。然而,這是我的問題。我試圖將responseObject中的結果複製到名爲resultsNSDictionary中。我用下面的代碼到那裏:AFNetworking GET功能未更改的變量

__block NSDictionary *results; 

[manager GET:@"http://daneolog.altervista.org/app/getData.php" 
    parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { results = responseObject; 
    NSLog(@"Inside: %@", results); } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; 

NSLog(@"Outside: %@", results); 

我試圖NSLog荷蘭國際集團的results字典INSIDE成功牙套,一切是-還好吧。

我試圖NSLog荷蘭國際集團的results字典OUTSIDE的GET函數,它(空)出現。

這是我的結果:

2015-11-12 14:34:34.875 TestApp[4864:258743] Outside: (null) 
2015-11-12 14:34:35.242 TestApp[4864:258743] Inside: (
     { 
     address = "Sample Address"; 
    } 
) 

現在注意到奇怪的事情:正在執行第一NSLog的外面。我不知道爲什麼這樣。誰可以幫我這個事?感謝一束。

回答

2

成功塊之外的代碼在成功塊完成之前執行,這就是爲什麼results出現爲nullresults位於主線程中,並且您沒有阻塞(因爲HTTP請求正確)。

您可以將弱引用傳遞給對象,並更新它。或者,如果您絕對需要等待結果(例如登錄),那麼您應該在主線程上執行此操作。

這裏是一個弱對象的例子:如果你想阻止也就是做在主線程可以使用

//results is an object created earlier 

__weak NSDictionary *weakResults = results; 

[manager GET:@"http://daneolog.altervista.org/app/getData.php" 
    parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) {  
      weakResults = responseObject; 
      NSLog(@"Inside: %@", results); 
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"%@", error); 
    }]; 


//when the success block finishes the results object will be populated 

NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

但是,如果反應沒有按」 t回來,你的應用程序掛起。

+0

嗯......我知道沿着這些線路發生了一些事情。我應該如何「將弱引用傳遞給對象並更新」?我不是很瞭解Objective-C(這就是爲什麼我首先使用AFNetworking的原因:)) –

+0

Oook。這是一個有趣的問題。每當我嘗試訪問weakResults時,它都會抱怨我說它必須有一個__block類型說明符。 :'( –

+0

這裏是關於__block和__weak的一些信息:http://stackoverflow.com/questions/19227982/using-block-and-weak – dstudeba