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这正是我所担心的。谢谢,我实际上实现了一些不同的东西,但我会把你说的结合起来。我甚至没有考虑到这一点。谢谢