Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 后台线程上的嵌套NSURLSessionDataTask_Objective C_Xcode_Nsurlsession - Fatal编程技术网

Objective c 后台线程上的嵌套NSURLSessionDataTask

Objective c 后台线程上的嵌套NSURLSessionDataTask,objective-c,xcode,nsurlsession,Objective C,Xcode,Nsurlsession,我的代码运行得很好。我需要的帮助或说明是嵌套的NSURLSessionDataTask实例。 我正在进行两个异步调用,第二个调用依赖于第一个调用 因此,我进行了第一个NSURLSessionDataTask(firstUrlCall)调用,它返回一个对象数组。然后,对于数组中的每个对象,我调用第二个NSURLSessionDataTask(secondUrlCall),并传入一个dataID 正如我前面提到的,它是有效的。我只是看到很多重复的行,重复的代码并不性感 那么,我能做些什么来防止这场灾

我的代码运行得很好。我需要的帮助或说明是嵌套的
NSURLSessionDataTask
实例。 我正在进行两个异步调用,第二个调用依赖于第一个调用

因此,我进行了第一个
NSURLSessionDataTask
firstUrlCall
)调用,它返回一个对象数组。然后,对于数组中的每个对象,我调用第二个
NSURLSessionDataTask
secondUrlCall
),并传入一个
dataID

正如我前面提到的,它是有效的。我只是看到很多重复的行,重复的代码并不性感 那么,我能做些什么来防止这场灾难呢?我需要我的代码是性感的

@property (nonatomic, strong) NSURLSession *Session;
第一次呼叫

-(void) firstUrlCall {

NSString *urlString = @"https://api.FIRSTURLCALL.com";

NSURLSessionDataTask *dataTask = [session
    dataTaskWithURL:[NSURL URLWithString:urlString]
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
          dispatch_async(dispatch_get_main_queue(), ^{
              if (!error) {

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

                [returnData enumerateKeysAndObjectsUsingBlock:^(id dataID, id obj, BOOL *stop) {
                      /*
                        -->here is where I call secondUrlCall<--
                      */
                      [self secondUrlCall:dataID]; 

                  }];
              }
          });
        }];
 [dataTask resume];
}
-(void) secondUrlCall:(NSString *)dataID {

NSString *urlString = [NSString stringWithFormat:@"https://api.SECONDURLCALL.com?dataID=%@",dataID];
NSURLSessionDataTask *dataTask = [session
                                  dataTaskWithURL:[NSURL URLWithString:urlString]
                                  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                      dispatch_async(dispatch_get_main_queue(), ^{
                                          if (!error) {
                                              NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data
                                                                                              options:0
                                                                                                error:nil];
                                              if ([[json objectForKey:@"type"] isEqualToString:@"sexy"]) {

                                                  [tableArray addObject:json];

                                                  // Reload table data
                                                  [self.tableView reloadData];
                                              }

                                          }
                                      });
                                  }];
[dataTask resume];
}

PS:如果你因为我大量使用“性感”这个词而被冒犯了,我很抱歉。

哦,我的天啊!如果网络断断续续或中途中断怎么办


我会将第一次调用的结果放入一个操作队列中,然后在处理每个操作失败时,您可以重新排队。

我认为代码没有太大错误;块使得在不使代码复杂化的情况下很难重复使用代码。@trojanfoe这正是我所担心的。谢谢,我实际上实现了一些不同的东西,但我会把你说的结合起来。我甚至没有考虑到这一点。谢谢