首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制等待NSURLSessionDataTask完成

强制等待NSURLSessionDataTask完成
EN

Stack Overflow用户
提问于 2014-10-30 23:12:57
回答 1查看 2.3K关注 0票数 0

我正在制作一个URLRequest,它发送尝试的登录信息,并等待web服务的响应,以确定用户是否可以/不能登录。

我希望这样做的方式是让用户在他的用户名和密码中输入两个文本字段,然后按下一个按钮,然后调用下面的函数。该函数将启动一个NSURLSessionDataTask,并使用登录的布尔NSURLSessionDataTask构造一个结构,并使用相应的错误消息(如果有的话)构造一个NSString

问题是,我的函数在NSURLSessionDataTask's完成块完成执行之前返回结构。有没有办法迫使我的程序等到这个任务超时或完成?或者,我可以在函数返回之前将完成块的执行推送到主线程上吗?

谢谢!如果有什么需要澄清的地方,请告诉我!

(同时,我也看到一些类似的问题在StackOverflow周围流传,这些问题都提到了GCD。这是个过火的解决方案吗?这些问题中没有一个是在谈论完全相同的事情,或者是在一个比我目前的理解更高的水平上这样做。我对目标C仍然很陌生)

代码语言:javascript
复制
- (struct RequestReport) sendLoginRequest: (NSString*) username withPassword:  (NSString *) password

..。(创建请求&设置HTTP主体)

代码语言:javascript
复制
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error){

    NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData: data options:0 error:nil];

    success = (BOOL)jsonObject[@"success"];
    statusText = (NSString *) jsonObject[@"errors"];

}];

[dataTask resume];

struct RequestReport rr;
rr.status = statusText;
rr.success = success;

return rr;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-30 23:20:49

您的方法应该如下所示:

代码语言:javascript
复制
- (void) sendLoginRequest:(NSString*) username withPassword:(NSString *) password callback:(void (^)(NSError *error, BOOL success))callback
    {
    NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error){
        if (error) {
            // Handle error
        }
        else {
           callback(error, YES);
       }
  }];

    [dataTask resume];

}

如下所示调用此方法:

代码语言:javascript
复制
[self sendLoginRequest:@"myUsername" password:@"password" callback:^(NSString *error, BOOL success) {
    if (success) {
         NSLog(@"My response back from the server after an unknown amount of time";
    }
}

有关块的更多阅读,请参见Apple的目标C编程,如何声明块,请参见fuckingblocksyntax.com

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

https://stackoverflow.com/questions/26665010

复制
相关文章

相似问题

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