首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sendAsynchronousRequest执行代码

使用sendAsynchronousRequest执行代码
EN

Stack Overflow用户
提问于 2014-06-17 23:33:07
回答 1查看 28关注 0票数 0

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

main.m

代码语言:javascript
复制
GlobalSettings *globalsettings = [[GlobalSettings alloc] init];
NSString *url = [globalsettings facebookLink];
NSLog(@"URL: %@", url);

因此,在GlobalSettings内部

代码语言:javascript
复制
-(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;
}

因此,这工作得很好,已经在completion块中进行了测试。然而,回到main.m,由于(我假设)异步请求仍在连接/处理请求,变量url被设置为(null)

如何解决这个问题,使变量保存为正确的值?

EN

回答 1

Stack Overflow用户

发布于 2014-06-18 05:44:39

url被设置为null,因为该方法由于异步请求而立即返回。避免这种情况的方法是委托。将main作为GobalSettings的委托,并从完成块调用委托方法。这篇文章并不是一个完全相同的复制品,但它足够让你上手。How to return the ouput if method is using NSURLConnection Asynchronous calls with blocks

Avt的答案是我的建议,但是返回一个块也是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24267865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档