2014-09-29 4 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 - массив/словарь цитируемых идентификаторов и т. Д.). Оттуда вы можете просмотреть все полученные вами коды и выполнить конкретный запрос, чтобы получить каждую цитату с помощью свойства идентификатора кавычек.

Без описания API почти невозможно дать вам точный ответ, но то, что я только что описал, является общим подходом к этим типам проблем.

1) Сделайте запрос, чтобы получить список котировок (только их первичный ключ/уникальные идентификаторы)

2) Loop через все идентификаторы из предыдущего запроса и сделать конкретный запрос, чтобы получить цитату, что Я бы.

Использование библиотеки 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

Извините за не размещение деталей в ОП. API позволяет только извлекать 1 случайную цитату за звонок. Я пошел вперед и настроил цикл для повторного запуска метода, основываясь на некоторых других деталях приложения, которые будут устанавливать int для количества раз. Что было бы лучшим способом объединить все возвращенные кавычки вместе в один массив или строку? – user717452

+0

Я бы установил глобальный NSMutableArray как свойство. Это можно сделать в .h, добавив «@property (неатомный, сильный) NSMutableArray * allQuotes» (без кавычек obv). Каждый раз, когда запрос на получение цитаты закончил, просто добавьте возвращенный NSString в этот глобальный массив, выполнив «[allQuotes addObject: newString]» – anders

+0

В вашем примере здесь, как бы я сказал, сколько раз перебирать запрос , скажем, чтобы получить 5 случайных котировок? – user717452

Смежные вопросы