2015-11-12 41 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