多个iOS GET请求(动态请求数)

时间:2014-09-29 15:13:54

标签: ios xml nsmutableurlrequest

我使用在线API检索随机名言。在我的代码中,我使用:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urloftheapi]
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
    [request setHTTPMethod:@"GET"];


    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection start];
    [connection release];

但是,我希望它可能引入多个引用。 API没有包含多个引号的函数,因此我需要运行多个NSMutableURLRequest才能完成所有操作。但是,由于它可能是1个请求,可能是几个,我不确定在代码中实现它的最佳方法。想法?

1 个答案:

答案 0 :(得分:1)

根据API的设置方式,您可以执行一个请求以获取引号列表(IE是一个引用ID的数组/字典等)。从那里你可以遍历你得到的所有quoteID,并做一个特定的请求,用引号ID属性得到每个报价。

如果没有对API的描述,几乎不可能给出确切的答案,但我刚才描述的是针对这些类型问题的一般方法。

1)请求获取引号列表(只是他们的主键/唯一ID')

2)循环显示上一个请求中的所有ID,并根据id提出具体请求以获取报价。

使用AFNetworking库,它看起来像这样。请记住,请求是在不同的线程中处理的,因此您可能需要设置NSNotification以跟踪何时完成每个单独的报价和/或跟踪报价总数(外部循环)和当前个人引用你要求的(内部循环)。通过比较这两个计数,您可以判断何时完成。

NSMutableArray *allQuotes = [[NSMutableArray alloc] init];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString *url = @"www.whatever.com/api/quotes";
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSArray *quoteList = (NSArray *)responseObject;
    for(NSString *quoteID in quoteList)
    {
        [manager GET:url parameters:@{@"quoteID":quoteID} success:^(AFHTTPRequestOperation *operation, id responseObject) {
            [allQuotes addObject:responseObject];
            [NSNotificationCenter defaultCenter] postNotificationName:@"FINISHED_GETTING_QUOTE" object:allQuotes];
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            //Handle failure here...
        }];
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    //Handle failure here...
}];

-(void)finishedGettingQuotes:(NSNotification *)notification
{
   if(currentRequest == totalRequests)
   {
      NSMutableArray *temp = notification.object;
   }
}