Ios NSURLSession方法在登录时返回true或false

Ios NSURLSession方法在登录时返回true或false,ios,nsurlconnection,nsurlsession,Ios,Nsurlconnection,Nsurlsession,我有一个UIViewController,它调用一个web服务 为了调用该web服务,我需要首先登录。 成功登录后,我收到 会话cookie 用户特定数据 我需要这些数据用于以后对服务器的任何调用 因此,一种简单的方法是(伪代码): 现在,问题是,作为一个好公民,我正在远离NSURLConnection,而且NSURLSession都是异步的 基本问题是: 如何编写这样的方法: -(BOOL)Login{ --do some async stuff here --return TRU

我有一个UIViewController,它调用一个web服务

为了调用该web服务,我需要首先登录。 成功登录后,我收到

  • 会话cookie
  • 用户特定数据
我需要这些数据用于以后对服务器的任何调用

因此,一种简单的方法是(伪代码):

现在,问题是,作为一个好公民,我正在远离NSURLConnection,而且NSURLSession都是异步的

基本问题是: 如何编写这样的方法:

-(BOOL)Login{
  --do some async stuff here
  --return TRUE or FALSE
)

谢谢

由于异步行为,您需要一个带有完成处理程序的方法

- (void)loginWithCompletion: (void (^)(BOOL))completion {
    // do some async stuff here
    completion(true); // This line returns the result of the task.
}
并使用它

[self loginWithCompletion:^(BOOL result) {
    NSLog(@"result: %d", result);
    if (result) {
        [self getSomeJsonDataForThisUser];
    }
}];

如果我能得到你的问题,那么你是在问如何从NSURLSession呼叫WS。如果是,则简单地创建NSURLSession&NSURLSessionDataTask,如下所示NSURLSession*session=[NSURLSession sharedSession];NSURLSessionDataTask*dataTask=[session dataTaskWithURL:[NSURL URLWithString:@“URLStringHere”]completionHandler:^(NSData*数据,NSURResponse*响应,NSError*错误){NSDictionary*json=[NSJSONSerialization JSONObject WithData:数据选项:0错误:无];NSLog(@“%@”,json);}];对此进行了研究,但我不能在需要返回BOOL的方法中使用它。为什么不呢,您可以基于来自服务器的响应返回BOOL—(BOOL)Login{NSURLSession*session=[NSURLSession sharedSession];NSURLSessionDataTask*dataTask=[session dataTaskWithURL:[nsurlUrlWithString:@“URLStringHere”]completionHandler:^(NSData*data,NSURLResponse*response,NSError*error){if(error){return NO;}else{return YES;}}}])@Gagan_iOS不,你绝对不能通过方法的返回值从异步任务中返回一些东西。等等。让我试试。回头见。谢谢。就是这样。我想给你比通常更多的积分:这让我对异步操作的现象以及完成处理程序睁大了眼睛。我更聪明谢谢,谢谢。
[self loginWithCompletion:^(BOOL result) {
    NSLog(@"result: %d", result);
    if (result) {
        [self getSomeJsonDataForThisUser];
    }
}];