2014-09-29 75 views
1

我正在使用在线API来检索随机的名言。在我的代码中,我使用:多个iOS GET请求(动态请求数)

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

根据API的设置方式,您可以执行一个请求来获取引号列表(IE数组/字典的quoteID's等)。从那里你可以遍历你得到的所有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; 
    } 
} 
+0

对不起,不张贴在OP的细节。该API只允许检索每次调用一个随机报价。我继续建立一个循环来反复运行该方法,基于将设置int次数的应用程序的一些其他细节。将所有返回的引号一起循环到一个数组或字符串中的最佳方法是什么? – user717452 2014-09-29 16:28:25

+0

我会设置一个全局NSMutableArray作为一个属性。这可以在.h中通过添加“@property(nonatomic,strong)NSMutableArray * allQuotes”(不含引号obv)来完成。每当获取报价的请求完成时,只需通过执行“[allQuotes addObject:newString]”将返回的NSString追加到该全局数组中“ – anders 2014-09-29 17:22:12

+0

在您的示例中,我将如何去告诉它多少次循环请求,说得到5个随机报价? – user717452 2014-10-01 04:26:07