【问题标题】:How to check if NSURLSessionDataTask is complete?如何检查 NSURLSessionDataTask 是否完成?
【发布时间】:2017-01-12 05:07:08
【问题描述】:

我得到了 n 个 json 数据,一旦整个东西被下载或获取 json 的过程完成,我需要更新 tableView 的 UI

for(int i = 1;i <=  self.numberOfEpisodes;i++)
{
    NSString *endPoint = [[[[urlJson stringByAppendingString:getEpisodes]stringByAppendingString:title]stringByAppendingString:@"&episodeNumber="]stringByAppendingString:[NSString stringWithFormat:@"%i",i]];
    endPoint = [endPoint stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    NSLog(@"End point %@",endPoint);
    [downloadJson:endPoint WithHandler:^(__weak id result)
    {
        NSArray *episodeArray =result;
        if(episodeArray && episodeArray.count > 0)
        {
            for(NSDictionary *dictionary in episodeArray)
            {
                //parse stuff here
            }
        }
        if(i == self.numberOfEpisodes)
        {
          //update UI
        }

    }];
}

问题出在这一行if(i == self.numberOfEpisodes)。不知道为什么整数i不是从1到self.numberOfEpisodes排列的。相反,它是一个从 1 到 self.numberOfEpisodes 的随机数。那么有没有另一种方法可以检查json的获取是否完成?

 (void)getJson:(NSString *)urlString WithHandler:(void(^)(__weak id result))handler
{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
NSURL * url = [NSURL URLWithString:urlString];
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];

[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setHTTPMethod:@"GET"];

NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
                                                   completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                       if(error == nil)
                                                       {
                                                           id returnedObject = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableLeaves error:nil];
                                                           handler(returnedObject);
                                                       }
                                                       else{
                                                           NSLog(@"error %@",error);
                                                       }
                                                   }];
[dataTask resume];
}

【问题讨论】:

    标签: objective-c json


    【解决方案1】:

    是的,dispatch_group_t 有一种方法可以实现这一目标

    //Creat group
        dispatch_group_t group = dispatch_group_create();
    
        for(int i = 1;i <=  self.numberOfEpisodes;i++)
        {
    
         //Enter group
        dispatch_group_enter(group);
    
            NSString *endPoint = [[[[urlJson stringByAppendingString:getEpisodes]stringByAppendingString:title]stringByAppendingString:@"&episodeNumber="]stringByAppendingString:[NSString stringWithFormat:@"%i",i]];
            endPoint = [endPoint stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
            NSLog(@"End point %@",endPoint);
            [downloadJson:endPoint WithHandler:^(__weak id result)
            {
    
                NSArray *episodeArray =result;
                if(episodeArray && episodeArray.count > 0)
                {
                    for(NSDictionary *dictionary in episodeArray)
                    {
                        //parse stuff here
                    }
                }
    
       // Then Leave group
                 dispatch_group_leave(group);
    
            }];
        }
    //Here you will be notified after it's done
    
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
                    // Do whatever you need to do when all requests are finished
                    //Update UI
                });
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2011-11-20
      • 2018-04-18
      相关资源
      最近更新 更多