Objective c 使用sendAsynchronousRequest执行代码

Objective c 使用sendAsynchronousRequest执行代码,objective-c,json,asynchronous,Objective C,Json,Asynchronous,由于sendAsynchronousRequest未在请求完成之前完成,因此变量被设置为null。见代码: main.m: 因此,在GlobalSettings内部: 因此,这项工作很好,已经在完井区块内进行了测试。然而,在main.m中,由于我假设异步请求仍在连接/处理请求,所以变量url被设置为null 如何解决此问题,以便将变量保存为正确的值?url设置为null,因为该方法由于异步请求而立即返回。避免这种情况的方法是委派。使main成为GobalSettings的委托,并从complet

由于sendAsynchronousRequest未在请求完成之前完成,因此变量被设置为null。见代码:

main.m:

因此,在GlobalSettings内部:

因此,这项工作很好,已经在完井区块内进行了测试。然而,在main.m中,由于我假设异步请求仍在连接/处理请求,所以变量url被设置为null


如何解决此问题,以便将变量保存为正确的值?

url设置为null,因为该方法由于异步请求而立即返回。避免这种情况的方法是委派。使main成为GobalSettings的委托,并从completion块调用delegate方法。这篇文章并不是完全重复的,但它离你很近,足以让你开始。

Avt的答案是我的建议,但返回一个块也有效

GlobalSettings *globalsettings = [[GlobalSettings alloc] init];
NSString *url = [globalsettings facebookLink];
NSLog(@"URL: %@", url);
-(NSString *)facebookLink
{
__block NSString *strReturn;

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://urlEditedOut/"]];

__block NSDictionary *json;
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                           json = [NSJSONSerialization JSONObjectWithData:data
                                                                  options:0
                                                                    error:nil];
                           strReturn = json[@"FB"];
                       }];
return strReturn;
}